Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
rvmutl(1)		    General Commands Manual		     rvmutl(1)

NAME
       rvmutl -	maintenance utility for	RVM log

SYNOPSIS
       rvmutl log

       rvmutl

DESCRIPTION
       The  program  rvmutl  is	 the  maintenance  utility  for	 RVM log.  Its
       priniciple features are log creation and	 maintenance,  but  there  are
       also  status  and  statistic display commands, as well as printing com-
       mands for log records.  There is	also a search facility	for  modifica-
       tions to	segments.  You may find	rvmutl a great debugging tools.

       The  are	two ways to use	rvmutl:	You may	supply the name	of the RVM log
       on the command line, or you do not supply the name on command line  but
       specify the log within rvmutl (see below).

       rvmutl  prompts for commands with a * (asterisk)	prompt.	 Most commands
       have one	or more	parameters, which are separated	by one or more spaces.
       Some  commands  have abbreviations, these will be specified in the com-
       mand section.

       For example, to examine the status of a RVM log (called logfile in  the
       example), you can do

       > rvmutl
       * open_log logfile
       * status

       Status of log:		/home/clement/linuxobj8/rvm-src/tests/logfile

	 log created on:	Tue Nov	 4 1997	17:31:10.244793
	 log created with:	RVM Interface Version 1.3  7 Mar 1994
	 (more display omitted ...)
       * quit

       As  another example, suppose you	want to	create a RVM log device	on the
       partition /dev/hdc7, of size 1 Megabyte,	you can	do

       > rvmutl
       * i /dev/hdc7 1M
       * quit

       Note that in the	preceding example, we use the abbreviation "i" for the
       command "init_log", and we can use the unit "M" to stand	for Megabyte.

I/O REDIRECTION
       You can redirect	input and output as in typical Unix shells.  For exam-
       ple, the	following command will have all	display	redirected to the file
       allrec:

       * show all > allrec
       *

COMMANDS
       In the following, I will	detail all the available commands:

       all_spec
	      Show  all	 special  log  records.	 Special log records are those
	      non-transaction records, such as wrap-around marker and  segment
	      dictionary entry.

       build_seg_dict [all] [clear]

       seg_dict	[all] [clear]

	      Build  the segment dictionary by scanning	through	the log.  Seg-
	      ment dictionary is a in-memory structure that maps segment  code
	      to segment file.	Segment	code is	used in	each transaction range
	      as a short hand of the segment file involved. If the all	option
	      is specified, the	whole log will be scanned, otherwise the scan-
	      ning will	stop when one segment dictionary entry is  found.   If
	      the  clear  option  is specified,	the segment dictionary will be
	      cleared before starting the scanning process.

       close_log
	      Close the	log file.

       copy_log
	      This provide a handy way to copy an existing log to another file
	      or partition.  Since rvm logs start on different offset, depend-
	      ing on whether they are files or partitions,  using  stock  Unix
	      commands such as cp or dd	sometimes is not as nice as using this
	      command.	Some meta data (such as	name of	log) in	the log	status
	      area  in the destination log will	also be	updated	to reflect new
	      meta data	after log copying.

       earliest
	      Show the earliest	transaction record in the log.

       init_log	[log [length]]
	      Initialize a log if it does not exist, or	re-initialize it if it
	      does  exist.   The  log will have	the name log and the length of
	      data area	will be	length.	 The actual size of the	 log  file  or
	      partition	 will  be  slightly bigger because: 1.	there is a log
	      status area (of size 3 sectors); and 2.  for  log	 used  on  raw
	      partition,  there	 will be an offset (of 16 sectors) to jump off
	      possible disklabel of the	partition.

	      The length parameter is specified	as an integer, optionally fol-
	      lowed by a single	character size code.  The following size codes
	      are defined: K or	k for kilobytes, M or m	for megabytes, S or  s
	      for sectors (512 bytes), P or p for pages	(which have system de-
	      pendent sizes) and B or b	for bytes (default).

	      If either	parameter is not specified, init_log will  prompt  for
	      the missing information.

	      RVM  maintains  the log continuously after creation.  If you are
	      going to re-initialize an	existing log, make  sure  the  log  is
	      empty  before  the re-initialization, otherwise, the transaction
	      records in the log would be lost (i.e., they would  not  be  ap-
	      plied  to	 the  data  segment).	You  can apply all transaction
	      records to the data segments and empty the log  (also  known  as
	      truncate	in  this  manual) by the recover command.  You can use
	      the command status to check whether a log	is empty.

       find_earliest
	      Print the	offset of the earliest transaction record in the log.

       find_tail
	      Print the	offset of the tail of the log.

       head   Print the	transaction record at the head	of  log.   (Note  that
	      there  could  be	even  earlier  than the	head record -- smaller
	      record number and	smaller	time stamp.  They are considered trun-
	      cated  from  the	log  and  can be overwritten upon them freely.
	      They are still on	the log	just because it	happens	that  rvm  has
	      not  yet	overwritten on them, and they may be useful for	debug-
	      ging. The	command	earliest prints	the earliest record.)

       log [log] [no_tail] [no_update |	update]

       open_log	[log] [no_tail]	[no_update | update]
	      Open the rvm log named log.  You must open a log before you  can
	      use  most	 of  the  rest	commands.  The optional	no_tail	switch
	      turns of the search of tail of the log (for  example,  when  the
	      log  tail	 is  corrupted).   The	optional  no_update and	update
	      switch controls whether update will be made on the log and  seg-
	      ment  (they  turn	on the rvm internal global variable rvm_no_up-
	      date).

       n [num]

       next [num]
	      Print the	next num records.  If the optional argument num	is not
	      specified, then the next one record will be printed.

       ns [num]

       next_sub_rec [num]
	      Print  the next num sub-records.	Sub-records are	the individual
	      ranges of	a transaction.	If the optional	argument  num  is  not
	      specified, then the next one sub-record will be printed.

       p

       peek [file] offset / [csf]
	      Peek on (or dump)	the content of file.  You must specify the ar-
	      gument file when you first peek or poke on a file, afterward you
	      can omit the argument and	rvmutl will continue using the current
	      file.  The argument offset determines from where the dump	should
	      start.  The argument csf determines how the dump should be done,
	      it comprises of three components:	c, s and f; each of them  rep-
	      resents  the count, size,	and format respectively. c is an inte-
	      ger and determines how many units, with  size  specified	by  s,
	      should  be dumped, and f specifies what is the dump format."  In
	      the following two	examples, the first command dumps, from	offset
	      0,  eight	 bytes in hexadecimal format; the second command dumps
	      two long integers	in decimal format.  Note  that	how  the  same
	      file content can be dumped into different	format.

	      *	peek 0 / 8xb
	      00000000000: 0x18	0000 0000 0000 0x23 0x17 0x14 0x63
	      *	peek 0 / 2dl
	      00000000000:	     24	  1662261027

	      There  are  seven	 different  possible  sizes: b for byte, l for
	      long, s for short, O for offset (two long	integers  representing
	      the  high	 and  low order	bits respectively), f for float, D for
	      double and t for time value.

	      There are	nine different possible	formats: c  for	 character,  d
	      for  decimal,  o for octal, x for	hexidecimal, u for unsigned, f
	      for float, D for double, O for offset (two long integers	repre-
	      senting the high and low order bits respectively)	and t for time
	      value.

	      You may omit the arguments c, s and f, and rvmutl	will  use  the
	      defaults,	 which	are  1,	d (decimal) and	l (long) respectively,
	      for the three arguments respectively.

       poke [file] offset / cs = val [val ... ]
	      Poke on (modify) the content of file.  You must specify the  ar-
	      gument file when you first peek or poke on a file, afterward you
	      can omit the argument and	rvmutl will continue using the current
	      file.   The  argument offset determines from where the modifica-
	      tion should start.  The argument cs determines how the modifica-
	      tions  should  be	done, it comprises of two components: c	and s;
	      each of them represents the count	and size respectively.	 c  is
	      an  integer  and	determines  how	many units, as specified by s,
	      should be	modified.

	      Examples:

	      *	poke 512 / 4db = 25
	      *	peek 512 / 8db
		     512:  25  25  25  25   0	0   0	0

	      *	poke 512 / 2xl = 25
	      *	peek 512 / 8db
		     512:  25	0   0	0  25	0   0	0

	      *	poke 512 / 2b =	0x26 0x27
	      *	peek 512 / 8db
		     512:  38  39  38  39  25	0   0	0

	      *	poke 512 / b = "abcde"
	      *	peek 512 / 8db
		     512:  97  98  99 100 101	0   0	0

	      Note that	in the second example, the character  x,  which	 indi-
	      cates hexidecimal	format in peek,	is sliently ignored.  To enter
	      a	hexidecimal number, you	should us prefix '0x' as in the	 third
	      example.	 Note also that	how a pattern is repeated by using the
	      argument c in first and third example.

	      There are	seven different	possible sizes:	 b  for	 byte,	l  for
	      long,  s for short, O for	offset (two long integers representing
	      the high and low order bits respectively), f for	float,	D  for
	      double and t for time value.

	      You can also enter string	by using the double-quote mark ("), as
	      in the last example.

       pr [num]

       prev [num]
	      Print the	previous num records.  If the optional argumentnum  is
	      not specified, then the previous one record will be printed.

       ps [num]

       prev_sub_rec [num]
	      Print  the  previous num sub-records.  Sub-records are the indi-
	      vidual ranges of a transaction.  If the optional argument	num is
	      not specified, then the previous one sub-record will be printed.

       quit   Quit rvmutl.

       read_status
	      Re-read  the  log	status from on-disk log	device (file or	parti-
	      tion) to in-memory structure (status).  Note  that  the  command
	      status  show the content of the in-memory	structure, but not the
	      on-disk device.	If you have made changes to  the  on-disk  de-
	      vice, you	may want to re-read them into the memory.

       monitor [clear] [no_update | update]
	      You  can	specify	memory ranges to be monitored by this command.
	      When a memory range is monitored,	there will be message  printed
	      out  whenever  there  are	modification within the	range (E.g. in
	      recover).	 The switch clear will clear all the monitor  previous
	      set.   The  switch  no_update and	update carry the usual meaning
	      (c.f. open_log).	You will be asked, interactively, for the  ad-
	      dresses  and  formats  for  the  ranges you want to monitor, you
	      should use the syntax similar to poke.   The  following  example
	      shows  how  to use monitor, show monitor,	as well	as how recover
	      prints out the modification.

	      *	open_log log3
	      *	monitor	update
		More ranges (y or n [n])? y

		Enter list of addresses/format,	terminate with null line
	      :	 0x200d7550/1l
	      :
	      *	show monitor

	      Range    Address/format	  Length
		 1    0x200d7550/1dl	      4

	      *	recover
	      do_nv: data from log record 2101,	range 52
		monitored range	1, 0x200d7550, length 4	matched	by
		modified range 0x200d7550, length 4
		0x200d7550:    537286660

	      change_tree_insert: inserting entire range
		monitored range	1, 0x200d7550, length 4	matched	by
		modified range 0x200d7550, length 4
		0x200d7550:    537286660

	      do_nv: data from log record 2101,	range 51
		monitored range	1, 0x200d7550, length 4	matched	by
		modified range 0x200ced40, length 8367
		0x200d7550:	       0

	      change_tree_insert: inserting entire range
		monitored range	1, 0x200d7550, length 4	matched	by
		modified range 0x200ced40, length 8367
		0x200d7550:	       0

	      do_nv: data from log record 2101,	range 50
		monitored range	1, 0x200d7550, length 4	matched	by
		modified range 0x200cdcc4, length 16
		0x200d7550:	       0

	      change_tree_insert: inserting entire range
		monitored range	1, 0x200d7550, length 4	matched	by
		modified range 0x200cdcc4, length 16

       recover [clear] [file] [no_update | update]
	      Truncate the log.	 Truncation  means  applying  the  transaction
	      records,	that  were logged on the log, to the data segment, and
	      then reclaiming the space	on the log used	by those records.

       set [seg_dict] field | addr = val
	      Set field	(or memeory locateion at addr) to val.	There are five
	      fields  that  you	 can set: head,	tail, prev_head, prev_tail and
	      log_start.  (You can use prev head and prev  tail	 to  represent
	      prev_head	 and  prev_tail	 respectively.)	  Only	the  in-memory
	      structure	of the field is	changed	by this	command, you  can  use
	      write_status  to	write the in-memory structure (status area) to
	      disk.

       s

       show

	      all all records

	      all_records all records

	      earliest earliest	record

	      head record at head of log

	      mods of /	cs [= val]

	      modificationss of	/ cs [=	val]
		     E.g.

		     * show mods 0x2000005c / 8b

		     Record number: 40756 modifies specified range:

		       Modification range:	  1   Log offset:    224664
			 VM address:	 0x2000005c   Length:	     52
			 Segment code:		  1   Offset:	   4188
			 Record	length:		108   Back link:     48

		       0x2000005c:  74 -107   0	  0   0	  0   0	  0

		     * show mods 0x2000005c / 1b = 74

		     Record number: 40756 assigns specified values

		       Modification range:	  1   Log offset:    224664
			 VM address:	 0x2000005c   Length:	     52
			 Segment code:		  1   Offset:	   4188
			 Record	length:		108   Back link:     48

		       0x2000005c:  74

		     * show mods 0x2000005c / 1b = 75
		       -- no more records

	      monitor all the range being monitored.

	      next next	record

	      next_sub_rec next	subrecord

	      ns next subrecord

	      num by record number

	      prev previous record

	      previous previous	record

	      ps previous subrecord

	      prev_sub_rec previous subrecord

	      rec_number num by	record number

	      remaining	all remaining records

	      seg_dict segment dictionary

	      seg_dictionary segment dictionary

	      statistics statistics of rvm activities

	      status status area of the	log

	      log_status status	area of	the log

	      sr current subrecord

	      sub_rec currect subrecord

	      tail tail	record

	      timestamp	by record timestamp (note: no effect)

       sizeof struct | all
	      Show the size of a the give structure struct,  or	 size  of  all
	      structure.   The	unit  is byte.	The following structure	can be
	      shown: condition,	device_t (dev),	 dev_region_t,	FLUSH_BUF_LEN,
	      free_page_t,   MAXPATHLEN,   int,	  list_entry_t,	 log_t	(log),
	      log_buf_t,  LOG_DEV_STATUS_SIZE,	log_dev_status_t,   log_seg_t,
	      LOG_SPECIAL_IOV_MAX,  LOG_SPECIAL_SIZE,  log_special_t, log_sta-
	      tus_t (status), log_wrap_t,  long,  MAX_READ_LEN,	 mem_region_t,
	      MIN_NV_RANGE_SIZE,    MIN_FLUSH_BUF_LEN,	 MIN_RECOVERY_BUF_LEN,
	      MIN_TRANS_SIZE, mutex, NUM_CACHE_TYPES, NV_LOCAL_MAX, nv_range_t
	      (nv),    NV_RANGE_OVERHEAD,   page_size,	 range_t,   rec_end_t,
	      rec_hdr_t, RECOVERY_BUF_LEN,  region_t,  rvm_length_t,  rvm_off-
	      set_t,   rvm_options_t,	rvm_region_t,	rvm_tid_t,   rw_lock_t
	      (rw_lock),  rw_lock_mode_t,   seg_t,   struct_id_t,   int_tid_t,
	      timeval,	trans_hdr_t,  TRANS_SIZE,  tree_links_t,  tree_node_t,
	      TRUNCATE,	ulong, unsigned.

       status

       log_status
	      Show the log status area,	which is the meta data about  the  log
	      (include	head offset, tail offset, space	used by	records, total
	      log size,	first record number, last record number, log  creation
	      time, last truncation time etc).

       sr

       sub_rec
	      Show the current subrecord.

       statistics
	      Show the statistics of rvm activities.

       tail   Show the transaction record at the tail of log.

       update Turn  on update (i.e. set	to false the rvm-internal global vari-
	      able rvm_no_update.) Update will not be made on the log and seg-
	      ment.

       no_update
	      Turn  off	update (i.e. set to true the rvm-internal global vari-
	      able rvm_no_update.)  Update will	be made	on the	log  and  seg-
	      ment.

       write_status
	      Write  out  the in-memory	log status structure to	the log	status
	      block on disk.

BUGS
       The command find_hole is	not yet	documented.

       Peeking using the format	or size	of time	value (t) does not work.

       The way to poke an offset value is not yet documented.

       sizeof of some structs (e.g. condition, int) wrongly displays the  page
       size rather than	the size of the	structure.

       The  use	 of no_update does not quite work.  Rvmutl easily crashes when
       the switch is used.

       The exact semantic of replay command is not documented, and the command
       itself crashes quite easily.

       The use of seg_dict in set is not yet documented.

       The command show	timestamp has no effect.

AUTHOR
       Yui Wah LEE completely rewrote this man page (Nov. 1997)

								     rvmutl(1)

NAME | SYNOPSIS | DESCRIPTION | I/O REDIRECTION | COMMANDS | BUGS | AUTHOR

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=rvmutl&sektion=1&manpath=FreeBSD+13.0-RELEASE+and+Ports>

home | help