patchはこのページの後半で取得できる。
| 使用には十分な注意が必要である。 ファイルシステムにダメージが出ても差し支えないような環境で試されたい。 無保証。 |
旧来のdump(8)コマンドは、
引数にはパーティションを指すデバイス名(/dev/da0s1eなど)か、
そのデバイスがマウントされたポイント(/usrなど)を指定することになっていた。
が、NetBSDのdump(やSolarisのufsdump)では
dump
するターゲットにファイル/ディレクトリを指定できるようになっているらしい。
(以下これをsubdir型と呼ぶ)
この機能をFreeBSDのdumpに持たせるためのパッチを作った、
というのが猿丸さんの記事[FreeBSD-users-jp 55482]。
私の方(4-stable on Sep.6,2000)で試したところ動作確認できた。
非常にありがたい。
例:
/usrがひとつのパーティションの場合、
# dump af dump.out /usr/bin /usr/local
のように書ける。ファイル/ディレクトリは複数指定可。
ところでこのパッチでは、引数をsubdir型で指定した場合には、
uフラグ(dumpdateを記録する)が無視され、
ダンプレベルも強制的に0固定とされてしまう。
つまり、インクリメンタル・ダンプができない。
これは残念なので、少し調べてみたところ、
subdir型でも、0以外のダンプレベルでのdump動作自体は何も問題ないようである。
uフラグを付けた場合、/etc/dumpdatesには
/dev/da0s1e 1 Mon Sep 25 17:12:27 2000
のような書式で記録される。
左から、対象デバイス、ダンプレベル、時刻である。
subdir型では、
ファイル/ディレクトリが複数指定可という仕様なので、
この対象デバイスの項への記録の取り方が問題になる。
上記制限は、この副次的なところから来る制限ではないかと思われる。
そこで勝手に以下のような拡張を行ってみた。
引数となるべきファイル/ディレクトリ(の組)に、 ひとつのタグ(ラベルのようなもの)を付けられるようにした。 定義は、/etc/dump.tagに
@mytag1 /usr/bin /usr/local
のような書式、
で行う。
その上で、dumpの引数としてデバイスやパスの代わりにtag名を指定する。
(tag名には必ず「@」を付ける)
# dump 0uaf dump0.out @mytag1 # dump 1uaf dump1.out @mytag1
/etc/dumpdatesには、デバイス名の代わりにtag名が記録されるようになる。
これでsubdir型でもインクリメンタル・ダンプが可能となる。
なお、従来のデバイスを指定する使い方との併用も問題ない。
非常に歴史が古く、 コードも枯れているコマンドに手を加えるのは、 気が引ける面もあるが、 昨今ストレージサイズが急激に増大しているので、 有用な場面もあるかと思う。
|
使用には十分な注意が必要である。
ファイルシステムにダメージが出ても差し支えないような環境で試されたい。
無保証。
バグを発見した場合は kanai@nadmin.org まで。 |
FreeBSD用 dump unofficial patch
dump.tagext-20000927.diff
このパッチは、記事[FreeBSD-users-jp 55482] で紹介されているパッチを含んでいるので、 直接FreeBSDのソースに当てる。
今日(Sep.26,2000)時点の、4-stable,5-currentのどちらにも適用可能。
(ただし動作確認は4-stableでのみ)
3-stableの場合には、このパッチを当てた後、
main.cに #include <sys/stat.h>
を加えること。
restoreについて
subdir型のdumpの場合、inode情報はそのデバイス内のすべてを対象にし、
データのみ対象以外は保存しないという方式らしい。
従って、restoreするときには、保存されなかった部分については、
inode情報はあってデータがないことになるので、
./mnt: (inode 230144) not found on tape
のようなワーニングが出るが、気にしなくてよいようだ。
(これは上記tagに関する拡張とは関係ない)