FreeBSDにおけるdump(8)用unofficial patch

September 26, 2000

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に関する拡張とは関係ない)


Presented by kanai@nadmin.org
Top