CrashPlan restore analysis

I’m the author of Arq, a backup product for the Mac, so I’m certainly biased, but in this post I’m only going to describe the factual results of a backup/restore with CrashPlan. You can verify these results yourself.

Warning: What follows is technical nitty-gritty. If you just want to know why Mac metadata are important in the real world, read The Importance of Metadata on the Mac.

UPDATE December 13, 2010: CrashPlan have released a new version of their app which passes all but 1 of the Backup Bouncer tests. The version is called “3.0″. Within the app the version is listed as “3.0 (1291687724486)”. This blog post analyzed the “3.8.2010″ version which was the latest as of February 2010.

Detailed Technical Analysis

Here’s what CrashPlan says it backs up and restores on the Mac:

  • Data fork
  • Resource fork
  • Owner information for regular files and directories
  • Symlink owner information
  • POSIX permissions
  • Finder Flags/Info (including type/creator)
  • Locked flag (this is part of Finder Flags)
  • Modification date
  • Creation date
  • Finder comments (.DS_Store file)
  • ACLs

CrashPlan states that the following are unsupported:

  • Other named forks
  • BSD Flags, which can be set via chflags
  • HFS+ extended attributes (i.e. xattr)
  • Aliases

That list a bit redundant: “other named forks” is the same as “HFS+ extended attributes”, and an “alias” is a special type of file containing some data as well as 2 extended attributes (com.apple.FinderInfo and com.apple.ResourceFork) and some Finder Flags (‘Alias’ and ‘Custom Icon’).

Also, CrashPlan doesn’t mention that they do not support hardlinks, FIFOs, or device files.

Test Results

I tested CrashPlan 3.8.2010 on a MacBook Pro running OS X 10.6.3. I followed Backup Bouncer‘s test procedure:

  1. Download Backup Bouncer 0.2.0
  2. ‘sudo bbouncer create-vol Src’ to create the source volume for testing
  3. ‘sudo bbouncer create /Volumes/Src’ to create the files to be backed up
  4. ‘sudo bbouncer create-vol Dst’ to create a volume for the restore
  5. Back up all the folders under /Volumes/Src using CrashPlan (to CrashPlan Central)
  6. Restore all the folders from CrashPlan to /Volumes/Dst
  7. ‘sudo bbouncer verify -d /Volumes/Src /Volumes/Dst’

Here’s the output of that ‘bbouncer verify’ command:

backup-bouncer-0.2.0 $ sudo ./bbouncer verify /Volumes/Src /Volumes/Dst
Verifying:    basic-permissions ... ok (Critical)
Verifying:           timestamps ... ok (Critical)
Verifying:             symlinks ... ok (Critical)
Verifying:    symlink-ownership ... FAIL
Verifying:            hardlinks ... FAIL (Important)
Verifying:       resource-forks ...
   Sub-test:             on files ... ok (Critical)
   Sub-test:  on hardlinked files ... FAIL (Important)
Verifying:         finder-flags ... FAIL (Critical)
Verifying:         finder-locks ... ok
Verifying:        creation-date ... ok
Verifying:            bsd-flags ... FAIL
Verifying:       extended-attrs ...
   Sub-test:             on files ... FAIL (Important)
   Sub-test:       on directories ... FAIL (Important)
   Sub-test:          on symlinks ... FAIL
Verifying: access-control-lists ...
   Sub-test:             on files ... ok (Important)
   Sub-test:              on dirs ... ok (Important)
Verifying:                 fifo ... FAIL
Verifying:              devices ... FAIL
Verifying:          combo-tests ...
   Sub-test:  xattrs + rsrc forks ... FAIL
   Sub-test:     lots of metadata ... FAIL

Detailed Failure Analysis

symlink-ownership test failure

The source directory looks like this:

$ ls -l Src/15-symlink-ownership/
total 32
-rw-r--r--  1 root  staff  14 Jun  1 07:07 some-file
lrwxr-xr-x  1 _www  _www   11 Jun  1 07:07 symlink1@ -> ./some-file
lrwxr-xr-x  1 root  wheel  11 Jun  1 07:07 symlink2@ -> ./some-file
lrwxr-xr-x  1 root  staff  10 Jun  1 07:07 symlink3@ -> ./symlink1

The files restored by CrashPlan look like this:

$ ls -l Dst/15-symlink-ownership/
total 32
-rw-r--r--  1 root  staff  14 Jun  1 07:07 some-file
lrwxr-xr-x  1 root  staff  11 Jun  1 07:11 symlink1@ -> ./some-file
lrwxr-xr-x  1 root  staff  11 Jun  1 07:11 symlink2@ -> ./some-file
lrwxr-xr-x  1 root  staff  10 Jun  1 07:11 symlink3@ -> ./symlink1

CrashPlan doesn’t restore symlink owner information, even though they claim to on their web site.

hardlinks test failure

The source directory looks like this:

$ stat -f 'inode:%i file:%N' Src/20-hardlinks/*
inode:48 file:Src/20-hardlinks/link1
inode:48 file:Src/20-hardlinks/link2
inode:48 file:Src/20-hardlinks/link3
inode:48 file:Src/20-hardlinks/some-file

Note the ‘inode’ number is the same for each file. That’s what a “hardlink” is. Wikipedia has more information on hardlinks.

The files restored by CrashPlan look like this:

$ stat -f 'inode:%i file:%N' Dst/20-hardlinks/*
inode:57 file:Dst/20-hardlinks/link1
inode:59 file:Dst/20-hardlinks/link2
inode:58 file:Dst/20-hardlinks/link3
inode:60 file:Dst/20-hardlinks/some-file

The ‘inode’ numbers are all different in the restored files.

finder-flags test failure

CrashPlan correctly restores almost all the Finder Flags, but Backup Bouncer marks this test as “failed” because CrashPlan fails to restore the Extended Finder Flag “busy”. The source files look like this:

$ GetFileInfo -P -a Src/40-finder-flags/mucho-flags-file
AVBSTClINMEDZ
$ GetFileInfo -P -a Src/40-finder-flags/mucho-flags-dir
aVbstClInmEDZ

The files restored by CrashPlan look like this:

$ GetFileInfo -P -a Dst/40-finder-flags/mucho-flags-file
AVBSTClINMEDz
$ GetFileInfo -P -a Dst/40-finder-flags/mucho-flags-dir
aVbstClInmEDz

The ‘z’ flag is “busy” (kExtendedFlagObjectIsBusy) in the Extended Finder Flags.

bsd-flags test failure

CrashPlan restores 1 of the 4 BSD flags, UF_NODUMP (1), UF_IMMUTABLE (2), UF_APPEND (4), and UF_OPAQUE (8). The source files look like this:

$ stat -f 'flags:%f name:%N' Src/60-bsd-flags/*
flags:15 name:Src/60-bsd-flags/dir-with-flags
flags:15 name:Src/60-bsd-flags/file-with-flags

The files restored by CrashPlan look like this:

$ stat -f 'flags:%f name:%N' Dst/60-bsd-flags/*
flags:2 name:Dst/60-bsd-flags/dir-with-flags
flags:2 name:Dst/60-bsd-flags/file-with-flags

In the output above, the “flags:15″ is all 4 flags (1+2+4+8=15) and “flags:2″ is UF_IMMUTABLE. CrashPlan actually restores the UF_IMMUTABLE flag correctly because it’s the same as the “Locked” Finder Flag in OS X.

extended-attrs test failure

Backup Bouncer creates some extended attributes with silly names on a file, a symlink, and a directory. The names of the extended attributes of each file are listed here (‘xattr-test’ has 2 extended attributes):

$ xattr-util l Src/70-extended-attrs/dir-with-xattrs
mamma.mia
$ xattr-util l Src/70-extended-attrs/symlink-with-xattrs
good.grief
$ xattr-util l Src/70-extended-attrs/xattr-test
message
this.that

The files restored by CrashPlan look like this:

$ xattr-util l Dst/70-extended-attrs/dir-with-xattrs
$ xattr-util l Dst/70-extended-attrs/symlink-with-xattrs
$ xattr-util l Dst/70-extended-attrs/xattr-test

Those 3 ‘xattr-util’ commands show no output because no extended attributes exist on the restored files.

fifo test failure

The source file is a “fifo” (a first-in-first-out file, or “named pipe”):

$ file Src/90-fifo/some-fifo
Src/90-fifo/some-fifo: fifo (named pipe)

CrashPlan doesn’t restore anything at all in this case:

$ file Dst/90-fifo/some-fifo
Dst/90-fifo/some-fifo: cannot open `Dst/90-fifo/some-fifo' (No such file or directory)

Backing up and restoring fifos is quite esoteric and probably of no interest to most people.

devices test failure

The source files are “device” files:

$ file Src/95-devices/devvn0
Src/95-devices/devvn0: block special
$ file Src/95-devices/devzero
Src/95-devices/devzero: character special

CrashPlan doesn’t restore anything at all in this case:

$ file Dst/95-devices/devvn0
Dst/95-devices/devvn0: cannot open `Dst/95-devices/devvn0' (No such file or directory)
$ file Dst/95-devices/devzero
Dst/95-devices/devzero: cannot open `Dst/95-devices/devzero' (No such file or directory)

Like fifos, device files are quite esoteric and probably of no interest to most people.

Conclusions

As I said at the beginning of this post, I wrote Arq, which competes with CrashPlan, so I’m biased.

If you’ve analyzed your programs and your files and determined you don’t need the metadata that CrashPlan skips, then you should be OK, at least in terms of metadata.

If you want to be sure all your data (and metadata) are backed up and restored correctly, then Arq and Jungle Disk are the only 2 options I know of. Arq has a Mac-native UI, a one-time software license fee (instead of an endless software subscription fee), and has gotten excellent reviews (see MacUpdate and MacStories).

10 Comments

  1. Test Date: Jun 3, 2010
    Software: CrashPlan PRO 3.8.2010, backing up to CrashPlan PRO server
    Hardware: MacBookPro3,1
    OS: Mac OS X 10.6.3

    Critical
    ========
    Verifying: basic-permissions … ok
    Verifying: timestamps … ok
    Verifying: symlinks … ok
    Verifying: resource-forks …
    Sub-test: on files … ok
    Sub-test: on hardlinked files … FAIL
    Verifying: finder-flags … ok

    All tests
    =========
    Verifying: basic-permissions … ok
    Verifying: timestamps … ok
    Verifying: symlinks … ok
    Verifying: symlink-ownership … FAIL
    Verifying: hardlinks … FAIL
    Verifying: resource-forks …
    Sub-test: on files … ok
    Sub-test: on hardlinked files … FAIL
    Verifying: finder-flags … ok
    Verifying: finder-locks … ok
    Verifying: creation-date … ok
    Verifying: bsd-flags … FAIL
    Verifying: extended-attrs …
    Sub-test: [ on files ] … FAIL
    Sub-test: creation time … ok
    Sub-test: modification time … ok
    Sub-test: [ on locked files ] … FAIL
    Sub-test: creation time … ok
    Sub-test: modification time … ok
    Sub-test: [ on directories ] … FAIL
    Sub-test: creation time … ok
    Sub-test: modification time … ok
    Sub-test: [ on symlinks ] … FAIL
    Sub-test: creation time … ok
    Verifying: hfs-compression …
    Sub-test: decmpfs xattr … not preserved
    Sub-test: UF_COMPRESSED flag … not set
    Sub-test: file contents … match
    Sub-test: creation time … ok
    Sub-test: modification time … ok
    Sub-test: hard link inode … ok
    Sub-test: hard link decmpfs xattr … not preserved
    Sub-test: hard link UF_COMPRESSED flag … not set
    Sub-test: hard link modification time … ok
    ok
    Verifying: hfs-compression_large …
    Sub-test: decmpfs xattr … not preserved
    Sub-test: UF_COMPRESSED flag … not set
    Sub-test: file contents … match
    Sub-test: creation time … ok
    Sub-test: modification time … ok
    Sub-test: hard link inode … ok
    Sub-test: hard link decmpfs xattr … not preserved
    Sub-test: hard link UF_COMPRESSED flag … not set
    Sub-test: hard link modification time … ok
    ok
    Verifying: access-control-lists …
    Sub-test: on files … ok
    Sub-test: on dirs … ok
    Sub-test: on locked files … FAIL
    Sub-test: on non-inherited acls … FAIL
    Sub-test: on inherited acls … ok
    Verifying: fifo … FAIL
    Verifying: devices … FAIL
    Verifying: combo-tests …
    Sub-test: xattrs + rsrc forks … FAIL
    Sub-test: lots of metadata … FAIL

    Comment by Ceriel Jacobs — June 3, 2010 @ 8:25 pm

  2. Backup Bouncer: Improved version 0.2.0 http://www.bombich.com/groups/ccc/wiki/7ba51/
    Test Date: Jun 4, 2010
    Software: Ahsay A-Click Backup ACB 5.5.7.0, restore without setting file permissions
    OS: Mac OS X 10.6.3

    $ sudo ./bbouncer verify -d /Volumes/Src /Volumes/Dst/Src/Src
    Verifying: basic-permissions … FAIL
    Verifying: timestamps … FAIL
    Verifying: symlinks … stat: ./symlink1: stat: No such file or directory
    FAIL
    Verifying: symlink-ownership … FAIL
    Verifying: hardlinks … FAIL
    Verifying: resource-forks …
    Sub-test: on files … ok
    Sub-test: on hardlinked files … FAIL
    Verifying: finder-flags … FAIL
    Verifying: finder-locks … FAIL
    Verifying: creation-date … FAIL
    Verifying: bsd-flags … FAIL
    Verifying: extended-attrs …
    Sub-test: [ on files ] … FAIL
    Sub-test: creation time … FAIL
    Sub-test: modification time … FAIL
    Sub-test: [ on locked files ] … FAIL
    Sub-test: creation time … FAIL
    Sub-test: modification time … FAIL
    Sub-test: [ on directories ] … FAIL
    Sub-test: creation time … FAIL
    Sub-test: modification time … FAIL
    Sub-test: [ on symlinks ] … FAIL
    GetFileInfo: could not refer to file (-43)
    Sub-test: creation time … FAIL
    Verifying: hfs-compression …
    Sub-test: decmpfs xattr … not preserved
    Sub-test: UF_COMPRESSED flag … not set
    Sub-test: file contents … match
    Sub-test: creation time … FAIL
    Sub-test: modification time … FAIL
    Sub-test: hard link inode … ok
    Sub-test: hard link decmpfs xattr … not preserved
    Sub-test: hard link UF_COMPRESSED flag … not set
    Sub-test: hard link modification time … FAIL
    FAIL
    Verifying: hfs-compression_large …
    Sub-test: decmpfs xattr … not preserved
    Sub-test: UF_COMPRESSED flag … not set
    Sub-test: file contents … match
    Sub-test: creation time … FAIL
    Sub-test: modification time … FAIL
    Sub-test: hard link inode … ok
    Sub-test: hard link decmpfs xattr … not preserved
    Sub-test: hard link UF_COMPRESSED flag … not set
    Sub-test: hard link modification time … FAIL
    FAIL
    Verifying: access-control-lists …
    Sub-test: on files … FAIL
    Sub-test: on dirs … FAIL
    Sub-test: on locked files … FAIL
    Sub-test: on non-inherited acls … ok
    Sub-test: on inherited acls … FAIL
    Test dir ‘/Volumes/Dst/Src/Src/90-fifo’ does not exist
    Verifying: devices … FAIL
    Verifying: combo-tests …
    Sub-test: xattrs + rsrc forks … FAIL
    Sub-test: lots of metadata … FAIL

    Comment by Ceriel Jacobs — June 4, 2010 @ 9:53 pm

  3. Is this still the case for CrashPlan in light of this old tweet?
    http://twitter.com/crashplan/status/17521557058

    Comment by Troy Elliott — September 4, 2010 @ 5:46 pm

  4. I don’t know. They didn’t specify when they would fix it. I guess I’ll have to sign up again and re-test.

    Comment by Stefan Reitshamer — September 4, 2010 @ 8:57 pm

  5. The current CrashPlan release is dated March 2010, the tweet where told to be fixed is from July 2010. The result is that from the end user view this isn’t fixed (yet).

    Comment by Pro Backup — September 23, 2010 @ 7:59 am

  6. Crashplan 3.0 just came out, and it succeeds at all BB tests except for extended attributes on symlinks. Just an FYI.

    Comment by Nik — December 7, 2010 @ 5:39 pm

  7. Thanks, I’ll test it and update my web page.

    Comment by Stefan Reitshamer — December 7, 2010 @ 5:45 pm

  8. FYI, Crashplan is upgraded to 3.0.1 (or 1.27.2011 as listed in the history). Would be good to see if they have fixed the last outstanding issue.

    Comment by Faramarz — January 28, 2011 @ 8:34 pm

  9. http://blog.dr3do.me/post/6865616192/bbouncer-crashplan

    Comment by @dr3do — July 4, 2011 @ 3:12 pm

  10. % sudo bbouncer verify -d /Volumes/Src /Volumes/Dst/Src
    Verifying: basic-permissions … ok (Critical)
    Verifying: timestamps … ok (Critical)
    Verifying: symlinks … ok (Critical)
    Verifying: symlink-ownership … ok
    Verifying: hardlinks … ok (Important)
    Verifying: resource-forks …
    Sub-test: on files … ok (Critical)
    Sub-test: on hardlinked files … ok (Important)
    Verifying: finder-flags … ok (Critical)
    Verifying: finder-locks … ok
    Verifying: creation-date … ok
    Verifying: bsd-flags … ok
    Verifying: extended-attrs …
    Sub-test: on files … ok (Important)
    Sub-test: on directories … ok (Important)
    Sub-test: on symlinks … FAIL
    Verifying: access-control-lists …
    Sub-test: on files … ok (Important)
    Sub-test: on dirs … ok (Important)
    Verifying: fifo … ok
    Verifying: devices … ok
    Verifying: combo-tests …
    Sub-test: xattrs + rsrc forks … ok
    Sub-test: lots of metadata … ok

    Comment by Adam — September 12, 2012 @ 3:25 pm

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.