Daily IT Matters, this is the place where I post my daily findings on IT.

Thursday, November 22, 2007

RAR command line with real world example

Every week I make an ASR backup of my Windows 2003 R2 servers, some of them are physically located at another site.
Due to that fact I had to think of a secure way to get my data over the WAN to my office.
Just plain copying is not an option because we all know if one bit falls over my complete ASR backup is rubbish.
And I would have wasted precious bandwidth.

A solution I could come up with was to use plain old WinRar, I found out that there was a command line version as well.
But the help that comes with that version is kinda cryptic.

Below is my command line that I came up with.
rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

I will explain it in full detail:
rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

a = add files to archive, that really speaks for itself I think.
we are going to add files to an archive.

rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

d:\asr-bu\done\asr_server.rar = this is the name of the archive we are going to create.

rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

-ri1 = this gives the archive process a priority of 1 which is the lowest, this way archiving will not degrade the performance of the server to much.

rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

-mt2 = Multithreaded: If you have a multithreaded cpu then with this command you give both threads work.

rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

-ag[yyyy-mm-dd] = here you give the archive a name with [2007-11-22] attached to it.

rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

-rv10 = This is for me the most important option: this switch create recovery volumes called REV files the number indicates how many REV will be made.

rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

-v51200 = here we specify the maximum size of a rar archive (we are creating an archive that will span a number of archives. The number 51200 is chose because it will show as 50.000 KB nicely in explorer (1024x50)

rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

-m5 = This is how you specify the compression level 5 is maximum compression 0 is just store no compression at all.

rar a d:\asr-bu\done\asr_server.rar -ri1 -mt2 -ag[yyyy-mm-dd] -rv10 -v51200 -m5 d:\asr-bu\*.bkf

d:\asr-bu\*.bkf = here we specify what to store in the Archive we create. My ASR backup is stored at this location, I use also a date in my naming of ASR's so I must use a wildcard here.

All of this results in the following set of rar files

asr_server[2007-11-22].part002.rar etc...


I hope this helps you.



RAR 3.70   Copyright (c) 1993-2007 Alexander Roshal   22 May 2007
Shareware version         Type RAR -? for help

Usage:     rar <command> -<switch 1> -<switch N> <archive> <files...>
               <@listfiles...> <path_to_extract\>

  a             Add files to archive
  c             Add archive comment
  cf            Add files comment
  ch            Change archive parameters
  cw            Write archive comment to file
  d             Delete files from archive
  e             Extract files to current directory
  f             Freshen files in archive
  i[par]=<str>  Find string in archives
  k             Lock archive
  l[t,b]        List archive [technical, bare]
  m[f]          Move to archive [files only]
  p             Print file to stdout
  r             Repair archive
  rc            Reconstruct missing volumes
  rn            Rename archived files
  rr[N]         Add data recovery record
  rv[N]         Create recovery volumes
  s[name|-]     Convert archive to or from SFX
  t             Test archive files
  u             Update files in archive
  v[t,b]        Verbosely list archive [technical,bare]
  x             Extract files with full path

  -             Stop switches scanning
  ac            Clear Archive attribute after compression or extraction
  ad            Append archive name to destination path
  ag[format]    Generate archive name using the current date
  ao            Add files with Archive attribute set
  ap<path>      Set path inside archive
  as            Synchronize archive contents
  av            Put authenticity verification (registered versions only)
  av-           Disable authenticity verification check
  c-            Disable comments show
  cfg-          Disable read configuration
  cl            Convert names to lower case
  cu            Convert names to upper case
  df            Delete files after archiving
  dh            Open shared files
  ds            Disable name sort for solid archive
  e[+]<attr>    Set file exclude and include attributes
  ed            Do not add empty directories
  en            Do not put 'end of archive' block
  ep            Exclude paths from names
  ep1           Exclude base directory from names
  ep2           Expand paths to full
  ep3           Expand paths to full including the drive letter
  f             Freshen files
  hp[password]  Encrypt both file data and headers
  id[c,d,p,q]   Disable messages
  ieml[addr]    Send archive by email
  ierr          Send all messages to stderr
  ilog[name]    Log errors to file (registered versions only)
  inul          Disable all messages
  ioff          Turn PC off after completing an operation
  isnd          Enable sound
  k             Lock archive
  kb            Keep broken extracted files
  m<0..5>       Set compression level (0-store...3-default...5-maximal)
  mc<par>       Set advanced compression parameters
  md<size>      Dictionary size in KB (64,128,256,512,1024,2048,4096 or A-G)
  ms[ext;ext]   Specify file types to store
  mt<threads>   Set the number of threads
  n<file>       Include only specified file
  n@            Read file names to include from stdin
  n@<list>      Include files in specified list file
  o+            Overwrite existing files
  o-            Do not overwrite existing files
  oc            Set NTFS Compressed attribute
  or            Rename files automatically
  os            Save NTFS streams
  ow            Save or restore file owner and group
  p[password]   Set password
  p-            Do not query password
  r             Recurse subdirectories
  r0            Recurse subdirectories for wildcard names only
  ri<P>[:<S>]   Set priority (0-default,1-min..15-max) and sleep time in ms
  rr[N]         Add data recovery record
  rv[N]         Create recovery volumes
  s[<N>,v[-],e] Create solid archive
  s-            Disable solid archiving
  sc<chr>[obj]  Specify the character set
  sfx[name]     Create SFX archive
  si[name]      Read data from standard input (stdin)
  sl<size>      Process files with size less than specified
  sm<size>      Process files with size more than specified
  t             Test files after archiving
  ta<date>      Process files modified after <date> in YYYYMMDDHHMMSS format
  tb<date>      Process files modified before <date> in YYYYMMDDHHMMSS format
  tk            Keep original archive time
  tl            Set archive time to latest file
  tn<time>      Process files newer than <time>
  to<time>      Process files older than <time>
  ts<m,c,a>[N]  Save or restore file time (modification, creation, access)
  u             Update files
  v             Create volumes with size autodetection or list all volumes
  v<size>[k,b]  Create volumes with size=<size>*1000 [*1024, *1]
  vd            Erase disk contents before creating volume
  ver[n]        File version control
  vn            Use the old style volume naming scheme
  vp            Pause before each volume
  w<path>       Assign work directory
  x<file>       Exclude specified file
  x@            Read file names to exclude from stdin
  x@<list>      Exclude files in specified list file
  y             Assume Yes on all queries
  z[file]       Read archive comment from file




bilbonotry said...

Thank you, I did not understand the -ag part before (that it is a suffix to the name of the archive)

Alexis said...
This comment has been removed by the author.
Alexis said...
This comment has been removed by the author.
Alex said...

I use rar files very often,but some time ago my important rar archive with doc file was corrupted,and my familiar advised-how to recover rar.Tool helped me and not once,also it is free as far as I know,therefore it liked me,utility works with all variants of this format and can recover data from archives and corrupt rar files with various compression rates and created in different software.

Matt said...

Thanks for the detailed explanation. Helped me get past something I wasn't seeing.

Wilson said...

Sir, do you have any idea how super cool you are?

This is extremely helpful since I can't use any GUI on my ubuntu server.
Thank you.

floor plan said...

Nothing works in command line with long enough file names, ie: source and destination...ace, zip, or rar.

This one give "the system cannot execute specified program"

Lucifer said...

THNX for the 'guide'... this was exactly what I needed since RAR has better compression then GZip. (~10% more).

On Linux (at least in my scenario) the '-mt2' option does not work... I think the multithreading support is only available for Windows...

Matt Bouchard said...

This is fantastic and saved me a lot of time. Well documented and clearly explained. Bravo.

Tech User said...

Thanks, this seems like the only place that discusses command line rar usage.

Chipa said...

Dear friend, just plain THANKS A LOT!
It helped me to do it in a flash.
Now: little detail: Since Win Vista, now windows is separating 2 folders called similar: program file and program file (x86) (because the 32&64 bit software). This second name will not be taken by command line because the space before (x86).
So I think it might be a temporary solution re-install Winrar as: c:\winrar to fix this thing.
However, I will do my gift here for everybody else: I will backup stuff and put pass on it (-pPassword, where -p is the command and Password is whatever is the password you want) AND add a comment (I suggest to use -zreadme.txt, where -z is the command and readme.txt is the file containing your comment).
Why the comment? I do forgot passwords!!! so, you put a comment that is the hint for the password!!! CLEVER IDEA, why? because when you open normally, even a password protected rar file, winrar (winzip won't do it) will SHOW YOU THE HINT ON THE RIGHT WINDOWS. Thank you...thank you.. i know ... i know...thanks my lovely crowd...

hulkbuster said...

Nice tutorial, i found about this site quite late, actually after i learnt how to make rar files from the command line, but i want to know : How do i add comments to the rar archive while making rar files from the command line,,, i use batch file to do this.
Any suggestion would be great.

hulkbuster said...

Hello, nice tutorial for Winrar from commandline, i found about this site after i learnt how to make a rar files from the commandline, i would like to know how can i add comments to rar files from the command line.
I make batch file to make rar files so that i do not need to remember the command again and again.


Pattu said...


i need to add parameters in SFX options like "xxxx.exe /quiet /norestart"

how to do this

and how to add modes

Please let me know this.

Atul said...

Thank you. I have a issue here. I have 2 files name 1.txt and 2. txt under test folder. I want to zip them name as 1_test.zip and 2_test.zip.

Please help me to write a script in batch for the same