ufs_copy で -a と -c を併用すると失敗する2009年02月18日 01時25分07秒

ufs_copy は mkuzip よりも速いと書いたが若干問題があるようだ。

ufs_copy に -a を渡すと非同期 IO を使う。kldload aio が必要になる。これだけで使った場合は問題は起きなかった。

そして、-c を渡すと Liunx の cloopfs、FreeBSD の geom_uzip 形式のディスクイメージが作れる。これ単体でも問題が起きないのは確認した。

しかし、非同期 IO の -a と圧縮の -c を同時に使うと、壊れたディスクイメージが出来てしまう。


$ ufs_copy -a -c -B /dev/da0.journal /usr/local/tmp/da0.uzip
$ mdconfig -a -t vnode -f /usr/local/tmp/da0.uzip 
 md4
$ mount -r /dev/md4.uzip /mnt/backup/
mount: /dev/md4.uzip : Invalid argument
$ tunefs -p /dev/md4
tunefs: /dev/md4: could not read superblock to fill out disk
$ tunefs -p /dev/md4.uzip 
tunefs: /dev/md4.uzip: could not read superblock to fill out disk
$ dumpfs /dev/md4.uzip 
dumpfs: /dev/md4.uzip: could not read superblock to fill out disk

ディスクのバックアップを取った後に、newfs をやってからイメージが読めないのに気が付いた。すぐに再構築出来るデータしかなかったとはいえ、少々迂闊だった。1998 年製の IBM の4GB の 2.5 インチディスクだ。5MB/s ぐらいしか出ない。壊れても惜しくないディスクなので、逆に酷使していたが人為的なミスは避けたい。