システムレスキューCDを使用してLAN経由で暗号化されたハードドライブデータを復元する方法

システムレスキューCDを使用してLAN経由で暗号化されたハードドライブデータを復元する方法

ハード ドライブのクローンを作成して、クローン ドライブを PC に挿入するだけで、既存のドライブと同じようにシームレスに起動できるようになるまで、最適な方法を知りたいです。

Debian を実行しているハード ドライブがありますが、SMART データによると故障しているようです。バックアップはありますし、新しいドライブに OS を再インストールすることもできますが、現時点ではドライブのクローンを作成することが第一の選択肢であり、起動可能な CD から System Rescue CD 5.0.3 を使用する以外に選択肢はありません。

ドライブにはそれほど多くのデータが入っておらず、おそらく使用済み領域は 10 GB 未満で、データもほとんどありません。そのため、この処理にそれほど時間がかかるとは予想していないため、時間についてはあまり心配していません。

記憶が確かなら、Debian のインストール時にオプションを選択して暗号化ドライブとして設定したので、/dev/sda は暗号化されていないブート パーティションとして表示され、残りは暗号化されています。そして、その「残り」には、暗号化された領域内に 10 GB の小さなルート パーティションがあり、残りは現在使用されていません。

また、古い PATA ドライブ (SATA ドライブは使用不可) を扱っており、コンピュータのマザーボードには PATA コネクタが 1 つあり、そこに起動用の CD-ROM ドライブと故障寸前のハード ドライブが接続された PATA リボン ケーブルが接続されています。そのため、ローカル転送用に 2 台目の PATA ドライブを接続する余地がありません。

この問題を回避するために、マザーボード上に同じ単一の PATA コネクタを備えた 2 台目のコンピュータを用意し、そこに起動用の別の CD-ROM ドライブと宛先ハード ドライブを接続しました。

私は両方のコンピュータを CD-ROM ドライブ経由で起動し、System Rescue CD 5.0.3 を起動し、故障したドライブを可能な限り複製するためのオプションを検討しています。

コンピューターは LAN 経由で利用可能であり、グラフィカル インターフェイスのないターミナルを介して SSH 経由で両方のコンピューターにリモート接続しています。

ソース ドライブと宛先ドライブのサイズについてはよくわかりません。ソース ドライブの容量が宛先ドライブよりも大きい可能性があるので、空のドライブ全体を実行するのではなく、使用済みの領域のみを転送するのが理想的です。

説明されているようにddrescueの使用を検討していましたここただし、これはデータをローカルに転送する方法についてのみ説明しています。

アップデート:Debian インストーラーがソース ドライブをどのようにセットアップするかを確認しています。パーティションが 3 つあり、最後の 1 つだけが暗号化されているようです。

src # fdisk -l /dev/sda
Disk /dev/sda: 37.3 GiB, 40027029504 bytes, 78177792 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x332e4146

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *       2048   247807   245760  120M 83 Linux
/dev/sda2        247808  8060927  7813120  3.7G 82 Linux swap / Solaris
/dev/sda3       8060928 78176255 70115328 33.4G 83 Linux

src# cryptsetup --verbose isLuks /dev/sda1 
Device /dev/sda1 is not a valid LUKS device.
Command failed with code 22: Invalid argument
src# cryptsetup --verbose isLuks /dev/sda2
Device /dev/sda2 is not a valid LUKS device.
Command failed with code 22: Invalid argument
src# cryptsetup --verbose isLuks /dev/sda3
Command successful.

また、同じ容量のドライブ間で転送しようとしていると思います。40 GB PATA ドライブから別の 40 GB PATA ドライブへ転送します。

目的地は次のとおりです。

dest# fdisk -l /dev/sda
Disk /dev/sda: 37.3 GiB, 40027029504 bytes, 78177792 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

アップデート:宛先から ddrescue を使用するために、NBD を使用してソース ドライブのパーティションを LAN 経由で公開することを検討しています。

ソース ドライブを公開するためにこれまでに試したことは次のとおりです...

src# nbd-server -d 8000 /dev/sda

...そして、宛先のコンピューターにローカルにマウントします。

dest# nbd-client src 8000 /mnt/nbd-sda

残念ながら、これを実行するとエラーが発生し、リモート デバイスをマウントすることすらできません。

Warning: the oldstyle protocol is no longer supported.
This method now uses the newstyle protocol with a default export
Error: Cannot open NBD: No such file or directory
Please ensure the 'nbd' module is loaded.
Exiting.

アップデート:次に試すのは、宛先ドライブのパーティションを手動で再作成することです。

まず、MBR をコピーしました:

src# dd if=/dev/sda of=/tmp/sda-mbr.dat bs=512 count=1
dest# scp root@src:/tmp/sda-mbr.dat /tmp
dest# dd if=/tmp/sda-mbr.dat of=/dev/sda
dest# sync

先に進む前に、今回は少なくとも回復パーティションを作成しておくと役立つと思いました。

dest# fdisk /dev/sda

最後のパーティションを削除し、最終パーティション用に約 15 GB のスペースを確保します。

Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x332e4146

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048   247807   245760  120M 83 Linux
/dev/sda2         247808  8060927  7813120  3.7G 82 Linux swap / Solaris
/dev/sda3        8060928 45809663 37748736   18G 83 Linux
/dev/sda4       45809664 78177791 32368128 15.4G 83 Linux

ソースの /dev/sda3 と同じ暗号化パーティションを宛先に作成する必要があります。このリカバリ パーティションにも同じことを行う必要があります。

dest# cryptsetup luksFormat /dev/sda3 --verify-passphrase
dest# cryptsetup luksFormat /dev/sda4 --verify-passphrase

次に、暗号化されたリカバリパーティションを開きます。

dest# cryptsetup open /dev/sda4 sda4-opened
dest# mkdir /mnt/sda4-open
dest# mke2fs -j /dev/mapper/sda4-opened
dest# mount /dev/mapper/sda4-opened /mnt/sda4-open

少なくとも、このリカバリ パーティションをリモートでマウントし、データをより適切なドライブに転送できるようになりました。

まず、ソースドライブ上の暗号化されたパーティションを開きました。

src# cryptsetup open /dev/sda3 sda3-opened
src# mkdir /mnt/sda3-open
src# mount /dev/mapper/sda3-opened /mnt/sda3-open

df を使用すると、ここでは 12 GB のディスク領域しか使用していないことがわかります。

アンマウントしますが、マップはそのままにしておきます:

src# umount /mnt/sda3-open
src# rmdir /mnt/sda3-open

ここで、ソース ドライブにリカバリ パーティションをマウントしたいとします。

src# mkdir /mnt/dest-sda4
src# sshfs root@dest:/mnt/sda4-open /mnt/dest-sda4

これをマウントすると、ddrescue を実行できるようになりました。

src# ddrescue -f -n /dev/sda1 /mnt/dest-sda4/sda1.ddrescue.img /mnt/dest-sda4/sda1.ddrescue.log

これにより、元のパーティションと同じサイズのイメージが生成されたため、未使用の領域が除外されていないようです。

私はしようとしていますfsアーカイバ代わりに今:

src# fsarchiver savefs /mnt/dest-sda4/sda1.fsarchiver.img.fsa /dev/sda1
Statistics for filesystem 0
* files successfully processed:....regfiles=314, directories=6, symlinks=0, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

/dev/sda1 をマウントして df を実行すると、33 M​​B しか使用されていないことがわかります。.fsa ファイルは 24 MB しかないので、圧縮されている可能性があります。元の 120 MB よりはましです。

次に、ルート パーティション sda3 で試して、どうなるか確認してみましょう。

src# fsarchiver savefs /mnt/dest-sda4/sda3.fsarchiver.img.fsa /dev/mapper/sda3-opened

これにはしばらく時間がかかると思われるので、今のところこの更新を保存しておきます。

アップデート:予想よりも早く進みました。最終的に得られたものは次のとおりです。

dest# ls -lh
total 7.7G
drwx------ 2 root root  16K Apr  8 01:49 lost+found
-rw-r--r-- 1 root root  24M Apr  8 02:04 sda1.fsarchiver.img.fsa
-rw-r--r-- 1 root root 7.7G Apr  8 02:43 sda3.fsarchiver.img.fsa

上記のコマンドの出力を見ると、さらに興味深いことがわかります。

src# fsarchiver savefs /mnt/dest-sda4/sda3.fsarchiver.img.fsa /dev/mapper/sda3-opened
Statistics for filesystem 0
* files successfully processed:....regfiles=149025, directories=84796, symlinks=20559, hardlinks=127551, specials=1269
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

私がこれを正しく理解していれば、ソース ドライブからデータを読み取る際に問題がなかったため、これは励みになります。

いくつかクリーンアップしてみましょう:

src# umount /mnt/dest-sda4
src# rmdir /mnt/dest-sda4

次に、アーカイブされたファイルを宛先の /dev/sda1 と /dev/sda3 に復元しますが、設定をどこで中断したか忘れてしまったので、まず宛先ドライブに何があるかを確認しましょう。

まず、/dev/sda1 にファイルシステムはありますか?

dest# mkdir /mnt/sda1
dest# mount /dev/sda1 /mnt/sda1
NTFS signature is missing.
Failed to mount '/dev/sda1': Invalid argument
The device '/dev/sda1' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

わかりました。ファイルシステムがないことは予想していましたが、NTFS メッセージは予想していませんでした。つまり、そこには何もありません。

最初のパーティションイメージを復元しましょう。

dest# fsarchiver restfs /mnt/sda4-open/sda1.fsarchiver.img.fsa id=0,dest=/dev/sda1
Statistics for filesystem 0
* files successfully processed:....regfiles=314, directories=6, symlinks=0, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

今すぐマウントしましょう:

dest# mount /dev/sda1 /mnt/sda1
dest# ls -l /mnt/sda1
...
dest$ df -h | grep sda1
...

今のところ順調そうです。

ではルートパーティションを作成しましょう。

dest# cryptsetup open /dev/sda3 sda3-opened
dest# mkdir /mnt/sda3-open
dest# mount /dev/mapper/sda3-opened /mnt/sda3-open
NTFS signature is missing.
Failed to mount '/dev/mapper/sda3-opened': Invalid argument
The device '/dev/mapper/sda3-opened' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

前と同じです。そこには何もありません。

パーティションイメージを復元しましょう:

dest# fsarchiver restfs /mnt/sda4-open/sda3.fsarchiver.img.fsa id=0,dest=/dev/mapper/sda3-opened
Statistics for filesystem 0
* files successfully processed:....regfiles=149025, directories=84796, symlinks=20559, hardlinks=127551, specials=1269
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

今すぐマウントしましょう:

dest# mount /dev/mapper/sda3-opened /mnt/sda3-open
dest# ls -l /mnt/sda3
...
dest$ df -h | grep sda3
...

今のところ順調そうです。

両方で以下も実行しました:

# fsarchiver probe simple

予想通りのようです。

私がまだ気づいていないことの 1 つは、これが Grub を台無しにするのではないかということです。ステージ 1 は MBR から正常に起動したが、前回これと同じようなことをしようとしたときに /boot パーティションでステージ 2 が見つからなかったという記憶があります。

このページにつながったこれGrub の修復方法について説明しています。

dest# mount -o bind /proc /mnt/sda3-open/proc
dest# mount -o bind /dev /mnt/sda3-open/dev
dest# mount -o bind /sys /mnt/sda3-open/sys
dest# chroot /mnt/sda3-open /bin/bash
(dest) chroot# mount /dev/sda1 /boot/
(dest) chroot# grub-install /dev/sda

Installing for i386-pc platform.
Installation finished. No error reported.

(dest) chroot# umount /boot
(dest) chroot# exit
dest# umount /mnt/sda3-open/{sys,dev,proc}

再起動すると、これは機能し、ドライブは正常に起動するはずですが、もう遅いので、まだ作業を開始したくありません。

また、これがすぐにハッピーエンドになるかどうかはまだ確信していません。上記の grub-install コマンドでは i386 用にインストールすると表示されていますが、64 ビット版が必要だと思います。

この部分は、rescue64 経由で System Rescue CD を再起動してやり直す必要があるかもしれません。デフォルトのブートで 32 ビットが起動したかどうかはわかりません。

残りはまた明日処理するつもりです。

アップデート:幸いなことに、System Rescue CD のデフォルトの起動は rescue64 だったので、問題はなかったはずです。

結局、私は LVM のことを完全に忘れていて、ドライブの UUID が明らかに一致していないことがわかりました。

...
cryptsetup: lvm is not available
cryptsetup: lvm is not available
cryptsetup: lvm is not available
cryptsetup: lvm is not available
  ALERT! /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx does not exist.
        Check cryptopts=source= bootarg: cat /proc/cmdline
        or missing modules, devices: cat /proc/modules; ls /dev
-r Dropping to a shell. Will skip /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxx
xxxxxxxx if you can't fix.
modprobe: module ehci-orion not found in modules.dep


BusyBox vx.xx.x (Debian x:x.xx.x-x+xxxxxx) built-in shell (ash)
Enter 'help for a list of built-in commands.

/bin/sh: can't access tty: job control turned off
(initramfs)

これらと格闘することもできると思いますが、面倒なのでやめておきます。代わりに、dirkt の提案を試して、/dev/sda 全体をクローン化します。UUID などすべてです。40 GB は 10 GB の 4 倍に過ぎないので、昨夜 LAN 経由で転送しましたが、それほど時間がかかりませんでした。

昨夜は NBD が動作しなかったため、これを実行できませんでした。そのため、イメージ ファイルに保存することにしました。完全なディスク クローンを作成する場合はそれができないので、パイプまたは名前付きパイプの方がうまくいくかどうか確認してみましょう。

最初に戻ると、両方のコンピューターが System Rescue CD の起動可能な CD から起動され、両方のコンピューターがそれぞれの DHCP 割り当て IP アドレスを介してネットワーク経由で利用可能になり、両方のコンピューターのルート パスワードがpasswdコマンドによって設定されました。

本物のドライブでこれを行う前に、小さな偽のドライブで練習したいので、まずはそのセットアップから始めます。

src# dd if=/dev/zero of=/root/tempsrc.dat bs=1M count=128
...
src# fdisk -l /root/tempsrc.dat
Disk /root/tempsrc.dat: 128 MiB, 134217728 bytes, 262144 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8b8647e7

Device             Boot  Start    End Sectors Size Id Type
/root/tempsrc.dat1 *      2048  34815   32768  16M 83 Linux
/root/tempsrc.dat2       34816 100351   65536  32M 82 Linux swap / Solaris
/root/tempsrc.dat3      100352 262143  161792  79M 83 Linux

src# mkdir /mnt/tempsrc
src# mkdir /mnt/tempsrc-mounted
src# losetup /dev/loop1 /root/tempsrc.dat -o $(expr 2048 \* 512)
src# mke2fs /dev/loop1
src# mount /dev/loop1 /mnt/tempsrc-mounted
src# echo 'This is partition 1' > /mnt/tempsrc-mounted/note1.txt
src# umount /mnt/tempsrc-mounted
src# losetup -d /dev/loop1
src# losetup /dev/loop1 /root/tempsrc.dat -o $(expr 100352 \* 512)
src# cryptsetup luksFormat /dev/loop1 --verify-passphrase
src# cryptsetup open /dev/loop1 loop1-opened
src# mke2fs -j /dev/mapper/loop1-opened
src# mount /dev/mapper/loop1-opened /mnt/tempsrc-mounted
src# echo 'This is partition 3' > /mnt/tempsrc-mounted/note3.txt
src# umount /mnt/tempsrc-mounted
src# cryptsetup close loop1-opened
src# losetup -d /dev/loop1
src# rmdir /mnt/tempsrc-mounted
src# rmdir /mnt/tempsrc

わかっています。私は再び LVM を扱いませんでした。まあ、仕方ありません。

現在、リモートの宛先に転送したい SD カード イメージのようなディスクのイメージを含む /root/tempsrc.dat があります。最初のパーティションには というファイルがありnote1.txt、3 番目のパーティションは暗号化されていて、note3.txt異なる内容の があります。 を実行して転送した後、これらすべてにアクセスできることを確認したいと思いますfsarchiver

目的地で何かを準備しましょう:

dest# dd if=/dev/zero of=/root/tempdest.dat bs=1M count=128
dest# fdisk -l /root/tempdest.dat
Disk /root/tempdest.dat: 128 MiB, 134217728 bytes, 262144 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

以下のループバック デバイスも作成しましょう。

src# losetup /dev/loop1 /root/tempsrc.dat
dest# losetup /dev/loop2 /root/tempdest.dat

転送を実行する準備をしていたところ、fsarchiverが説明どおりに処理できないことがわかりました。ここそしてここ

私は次のようなことをしたいと考えていました:

src# fsarchiver savefs /tmp/fifo1 /dev/loop1
dest# fsarchiver restfs /tmp/fifo2 id=0,dest=/dev/loop2

アップデート:宛先の 40 GB ドライブを一時的な 3 番目のドライブに交換し、宛先 PC の電源を入れました。

まず、この新しいドライブをセットアップしましょう。

dest# mkdir /mnt/sda-open
dest# mount /dev/sda1 /mnt/sda-open

もう一度転送を試みますが、今回は /dev/sda 全体を一度に操作します。

src# mkdir /mnt/dest-sda
src# sshfs root@dest:/mnt/sda-open /mnt/dest-sda
src# fsarchiver savefs /mnt/dest-sda/src-sda.fsarchiver.img.fsa /dev/sda
filesys.c#317,generic_mount(): partition [/dev/sda] cannot be mounted on [/tmp/fsa/20180408-222928-xxxxxxxx-00] as [vfat] with options []
oper_save.c#1032,filesystem_mount_partition(): cannot mount partition [/dev/sda]: filesystem may not be supported by either fsarchiver or the kernel.
removed /mnt/dest-sda/src-sda.fsarchiver.img.fsa

さて、そのアイデアはここまでです。おそらく、彼らがそれを「FS」アーカイバと呼ぶのには理由があるのでしょう。partimage を試してみましょう。

src# partimage --compress=1 save /dev/sda /mnt/dest-sda/src-sda.partimg.bz2

これも機能しませんでした。どうやら、これはファイルシステムを扱っており、ディスク全体は扱っていないようです。

ディスク全体を操作しているので、ddrescue が動作するかどうか確認してみましょう。

src# ddrescue --no-scrape /dev/sda /mnt/dest-sda/src-sda.ddrescue.img /mnt/dest-sda/src-sda.ddrescue.img.log
GNU ddrescue 1.21
Press Ctrl-C to interrupt
     ipos:  785580 kB, non-trimmed:        0 B,  current rate:  12320 kB/s
     opos:  785580 kB, non-scraped:        0 B,  average rate:  10615 kB/s
non-tried:   39241 MB,     errsize:        0 B,      run time:      1m 14s
  rescued:  785580 kB,      errors:        0,  remaining time:          1h
percent rescued:   1.96%      time since last successful read:          0s
Copying non-tried blocks... Pass 1 (forwards)

私は午後 5 時 41 分に、40 GB のドライブで 100 Mbps の LAN 経由でこれを開始しました。現時点では、出力によると約 1 時間で完了するようです。

答え1

どうやら、中間ドライブについては正しい方向に進んでいたようです。これは私が当初意図していたことではありませんでしたが、問題を解決するのに役立ちました。

新しいドライブは元のドライブのクローンであり、順調に動作しています。

提示された制限内で元のドライブをクローンするには、特に Clonezilla を使用せずに System Rescue CD を使用して LAN 経由で行う必要がありましたが、次のようにしてこれを実現できました。

まず、上記のように、予備の PC に一時的な 160 GB ハード ドライブを接続し、起動可能な System Rescue CD ディスクを使用して両方のコンピューターを起動しました。

自分の PC からsrc、を使用して 160 GB ハード ドライブをdestPC にローカルにマウントしsshfsddrescue上記のように実行して、故障したハード ドライブをイメージ ファイルとして 160 GB ハード ドライブにイメージ化しました。この 40 GB ドライブは 40 GB イメージ ファイルにイメージ化され、100 Mbps LAN 経由で完了するまでに約 1 時間かかりました。

このイメージを保存しておけば、再度同じ操作を行う必要がなくなります。この時点から、この初期イメージがキャプチャされた後は、データの増分バックアップで復元できるはずです。

srcこのフェーズが完了すると、故障した 40 GB ドライブを、触れたり電源を切ったりすることなく、ホスト内の同じ 40 GB 容量の交換用ドライブと交換しましたdest

src次に、 System Rescue CD を起動した状態で再度電源を入れ、再度destディレクトリをマウントしsshfs、今度は次のコマンドでイメージから復元しました。

dest# ddrescue --force --no-scrape /mnt/dest-sda/src-sda.ddrescue.img /dev/sda /mnt/dest-sda/src-restore-sda.ddresue.img_2018-04-08.log

完了するまでにさらに約 1 時間かかりました。

これはパーティションではなくドライブ全体のイメージだったので、CD を取り出して再起動するだけsrcで、すべてが元通りになりました。

関連情報