
ハード ドライブのクローンを作成して、クローン ドライブを 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 MB しか使用されていないことがわかります。.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 ハード ドライブをdest
PC にローカルにマウントしsshfs
、ddrescue
上記のように実行して、故障したハード ドライブをイメージ ファイルとして 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
で、すべてが元通りになりました。