Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[FreeBSD-users-jp 72376] ufs_copy (Re: disk

0 views
Skip to first unread message

Hidetoshi Shimokawa

unread,
Nov 28, 2002, 8:06:32 AM11/28/02
to
下川です.

随分前の話ですが,
disk の backup をいかに効率よくとるかについてです.

At Sat, 09 Nov 2002 20:23:57 +0900,
Kenichi Okuyama wrote:
> http://www.partimage.org/
> というものもあります。beta support ですが UFSもサポートしていますし、
> FATであればほぼ完全に大丈夫です。HDD全体を別のHDDにバックアップする
> 場合は、かなり便利です。

確かに, 使用してない sector をすっとばせば, speed / space 共に改善され
そうですね. partimage のことはあまり調べてませんが,どんな形式で書きだ
されるのでしょうか?

最近は, HDD が一番手軽な backup 手段になりつつあるので, dd とか使って,
まるごと disk image を copy するのが一番よいかもとか思っています. ラン
ダムアクセスができるので, mdconfig とかで, device に見せかければ,
mount もできますし, なんといっても backup/restore が速いですから.

というわけで, free block を飛ばして copy する ufs_copy というのを書い
てみました. copy 先は, dd と同じように, disk image そのものになります
が, free block は書かないので, (UFS 上などに作ったばあい)sparse file
になります. (つまり, ls -l で見る size は 元のdisk のサイズと同じだが,
du で見えるサイズは, もとの filesystem で使っている程度)

async I/O も使えるようにしたので, 特に raw device から raw deviceへの
copy はかなり速くなっています. (ほぼ, disk の raw speed が出るはずで
す. 条件にもよりますが, 1GBあたり 40秒程度で copy できるのではないかと
思います)

まだ, bug 等もあるかもしれないので, くれぐれも注意して使用してください.
bug report や benchmark をしていただけると, とても嬉しいです.

libufs を使う関係上 current でしか compile できませんが, static linkす
るので, binary を -stable に持っていけば, -stable でも動くはずです.

dd と同じく, R/W mount している filesystem の image を copy しても辻褄
があっているとは限りません. 基本的に unmount しているかread-only で
mount している filesystem, あるいは snaphost file を想定しています.

http://people.freebsd.org/~simokawa/ufs/

ちなみに, disk 上のどのセクタが使われているかという当初の質問はこの
source を読んで頂ければわかります. 関係しているのは数十行程度です.

---------------------------------------------------------------------------
NAME
ufs_copy - fast copy utility for UFS filesystem

SYNOPSIS
ufs_copy [-a] [-B] [-b block_factor] [-v] src dst

DESCRIPTION
The ufs_copy copies a UFS filesystem image like dd(1).
It doesn't copy free blocks for speed and it generates
a sparse destination file for saving space.

-a Use asynchronous I/O for fast copy. This needs kernel support.
Do "kldload aio" or insert "options VFS_AIO" in your
kernel config file

-B Copy boot blocks too.

-b Specify the amount of the data which tranfered at once.
The size is limited to block_factor * fs_fsize.
The default size is set to MAXPHYS.
Note: for asynchronous I/O, don't increase this value than
default. the transfer size lager than MAXPHYS gives poor
performance.

-v Verbose

src Source filesystem: a device file, a mount point,
a snaphost file or regular file.

dst Destination filesystem: a device file or a refular file.

EXAMPLE
- Make a copy
# ufs_copy -a /dev/ad0a /somewhere/backup_file

- Check size and disk usage
# ls -l /some/where/backup_file
# du /somewhere/backup_file

- Mount/unmount backup image
# mdconfig -a -t vfs -f /somewhere/backup_file
# mount -r /dev/md0 /mnt
# ls /mnt
# umount /mnt
# mdconfig -d -u 0

- Restore hole image
# ufs_copy -a /some/where/backup_file /dev/ad0a1

BUGS
It doesn't support UFS2 yet.
Don't use this for devices which have bad sectors.
Copying R/W mounted filesystem would give unexpected results,
use snapshot file instead of it.

AUTHOR
Hidetoshi Shimokawa <simo...@freebsd.org>

/\ Hidetoshi Shimokawa
\/ simo...@sat.t.u-tokyo.ac.jp
PGP public key: http://www.sat.t.u-tokyo.ac.jp/~simokawa/pgp.html

0 new messages