「送信機」と「受信機」という2つのマシンがあります。
送信者は毎晩次のコマンドを実行します。
zfs send -i bpool/backups@2018-09-04 bpool/backups@2018-09-05 | ssh receiver /sbin/zfs receive bpool/backups
送信者から受信者に最新のbpool /バックアップを送信します。 (日付は毎晩自動的に生成されます。)
誰か(受信者側)が次のことを行う場合:
cd /bpool/backups
ls
次のエラーにより、夜間のバックアップ操作が中断されます。
root@sender:~# zfs send -i bpool/backups@2018-09-04 bpool/backups@2018-09-05 | ssh recevier /sbin/zfs receive bpool/backups
cannot receive incremental stream: destination bpool/backups has been modified
since most recent snapshot
warning: cannot send 'bpool/backups@2018-09-04': Broken pipe
(atimeが更新されたためだと思います。)
これが起こらないようにするにはどうすればよいですか? (receiver:/ bpool / backupsを読み取り専用に設定すると、受信操作はどうなりますか?)
答え1
あなたもちろんターゲットデータセットを読み取り専用にします(ターゲットreadonly=on
データセットまたは親データセットのいずれかにzfsプロパティを直接設定することによって)。これは、更新されたスナップショットの受信を妨げません。これはreadonly
、データセットに含まれるファイル(ディレクトリ、属性)を変更できないことを意味します。
readonly=on
これはプールをインポートするときの設定とは異なります。プールを使用することは、readonly
IOがプールのバックエンドに何も書き込めないことを意味します。
私は原則として、誰もとにかく許可されたデータセットを変更してはいけないので、許可された答えにあまり満足していません。
私が移行に反対するもう1つの理由は、増分スナップショットデータ()を受け取る-F
と移行が行われるためです。zfs send -i data@older-snap data@newer-snap
-F
返品元のデータセットに存在しないスナップショットは、バックアップデータセットから削除されます(最新のデータでも)。予期しない状況が発生した場合(単にエラーを無視するよりも)、サービスが失敗してエラーを報告するようにサービスを設計することを常にお勧めします。
atime=off
バックアッププール/データセットの場合は目的に反しているため、これを設定することもできます。
編集:ああ、次を使用して受信データセットでのみこれらのプロパティを設定できることを追加する必要があります(これらのプロパティはソースデータセットで直接設定するとオーバーライドされます)。zfs receive -o atime=off -o readonly=on
答え2
zfs recv -F
受信データセットを以前に受信したスナップショットに強制的にロールバックします。 atimeをオフにすると、バックアップファイルを確認する人の問題のみが解決されますが、他の変更がある場合は-Fフラグを使用する必要があります。
答え3
アクセス時間の更新をオフにするだけで十分です。
zfs set atime=off bpool/backup
答え4
個人的には、私はスナップショットを読み取り専用に直接マウントすることを好むので、設定を通してスナップショットを変更することはありません。
暗号化されたデータセットを使用する場合は、まず次のコマンドを実行してキーをロードします。
$ sudo zfs load-key -a
次に、たとえば、次のようにマウントします(-o ro
オプションは不要)。
$ mkdir /tmp/zp
$ sudo mount -t zfs zpool_my_passport/backup/2020_Dell_laptop@2021_01_05_-_test_update /tmp/zp/
しかし、修正が発生した場合は本当に実用的ですzfs recv -F
。 (私はデータ損失が少し気になる-F
のでこの方法を好みます。)