複数のパーティションに対してluksHeaderBackupを自動化するスクリプト

複数のパーティションに対してluksHeaderBackupを自動化するスクリプト

私はそれぞれ、少なくとも6つのdm-cryptパーティションを持つ複数のサーバーを持っています。 Luksヘッダーバックアップを常に安全な場所に保存するための自動化された方法があることを願っています。これまではヘッダーバックアップを手動で行ってきました。私の問題は、ハードドライブを交換したり別のシステムを変更したりするときに新しいluksヘッダーバックアップを実行するのを忘れる傾向があることです。

luksヘッダーのバックアップがあることを確認し、そうでない場合は、新しく作成する既存のスクリプトを探しています。誰かがそのようなスクリプトを書いたと仮定する必要があります。 (その必要性ははっきりしているようです。)

存在しない場合は、この目的のためにbashスクリプトを作成してみましょう。

私の手動コマンドは次のとおりです。

cryptsetup luksHeaderBackup /dev/sdXN --header-backup-file /path/to/backup/$mountpoint_luksHeader_$devUUID.img

ヘッダーイメージファイルのファイル名にマウントポイントとデバイスUUIDを含めたい。

起動に関して私が持っている唯一の手がかりは、すべてのデバイスを繰り返してタイプのパーティションを見つけ、そのマウントcryptポイントとUUIDを見つける必要があることです。私はほとんどの情報がlsblkとblkidにあることを知っています。スクリプトで使用するために抽出する方法がわかりません。

編集:私の目標は、マウントポイントに基づいてファイル名をインテリジェントに指定することです。

各 crypto_LUKS デバイスには、1 つ以上の BTRFS サブボリュームが含まれています。たとえば、crypto_LUKSデバイスには、sysluks次の4つのbtrfsサブボリュームが含まれています。

  • @ルーツ
  • @var_log
  • @root_snapshots
  • @var_log_snapshots

このコマンドは、lsblk次の出力を提供します。ここで、マウントする最後のサブボリュームのみがマウントポイントとして表示されます。

NAME         MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda            8:0    0  1.8T  0 disk  
└─sda2         8:2    0  1.8T  0 part  
└─sysluks  254:0    0  1.8T  0 crypt /var/log/.snapshots

/var/log/.snapshotsルートデバイスのバックアップを含むファイルとして使用するのに理想的な名前ではありません。

このコマンドは、findmnt -t btrfs特定のソース(/dev/mapper/sysluksなど)のすべてのマウントポイントを表示します。一部のローカルテストを実行すると、findmntシステムの起動時に常にインストール順序に従ってソートされたリストが返されるようです。そのリストから最初のマウントポイントを選択すると、ファイル名を指定するのに役立ちますが、最後のマウントポイントも選択しますが、lsblkこれは理想的ではありません。

答え1

cd  /path/to/backup/
lsblk --fs --output FSTYPE,UUID | grep crypto_LUKS | tr -s ' ' | cut -d ' ' -f2 | \
while read uuid; do 
    mntpoint=$(lsblk /dev/disk/by-uuid/$uuid --output MOUNTPOINT | sed 1,1d | head -n 1)
    name="${mntpoint}_luksHeader_$uuid.img"
    if [[ ! -e "$name" ]]; then     
        cryptsetup luksHeaderBackup /dev/disk/by-uuid/$uuid --header-backup-file $name
    fi
done

バックアップパスを変更しても大丈夫でしょう。デバイスのマウントポイントが変更されると、複数のヘッダーバックアップが作成されることに注意してください。それ以外の場合は、すでにバックアップされているデバイスを無視します。

答え2

ループからこのスクリプトを呼び出すことができます。

https://github.com/stanclai/luks_backup

cronに追加します。

いくつかのメモ/考え:

  1. スクリプトが自動的に回転しない場合は、パスにバックアップ日付を追加することをお勧めします/path/to/backup/$(date +%y%m%d)/$mountpoint_luksHeader_$devUUID.imgmkdir -p /path/to/backup/$(date +%y%m%d)
  2. /path/to/backup/他のボリューム、好ましくはネットワークの場所になければなりません。バックアップしているのと同じディスク/ボリューム/サーバーにバックアップが存在しないようにします。問題が発生するとアクセスできないためです。 。
  3. どちらの場合も、生成されたファイルをバックアップするには有機バックアップシステムを使用することをお勧めします。

乾杯:)

関連情報