Я хотел бы знать, как лучше всего приступить к клонированию моего жесткого диска до такой степени, что я смогу просто вставить клонированный диск в мой компьютер и без проблем загрузиться с него, как в настоящее время я делаю с существующим диском.
У меня есть жесткий диск, на котором запущен Debian, который, по данным SMART, выходит из строя. У меня есть резервные копии, и я могу переустановить ОС на новый диск; тем не менее, мое первое предпочтение на данный момент было бы клонировать диск, и в настоящее время у меня нет другого выбора, кроме как использовать System Rescue CD 5.0.3 с загрузочного компакт-диска.
На диске не так много места - вероятно, менее 10 ГБ используемого пространства с очень небольшим объемом данных, поэтому я не слишком обеспокоен временем, потому что не ожидаю, что это займет необычайно много времени.
Если я не забуду, я установил Debian при установке Debian, чтобы настроить его как зашифрованный диск, поэтому я считаю, что /dev /sda отображается как незашифрованный загрузочный раздел, а остальное зашифровано, а затем в этом "rest" я иметь небольшой корневой раздел размером 10 ГБ внутри зашифрованной области, а остальная часть в настоящее время не используется.
Я также имею дело со старыми дисками PATA - нет доступных дисков SATA - и у компьютера есть один разъем PATA на материнской плате, к которому подключен ленточный кабель PATA с приводом CD-ROM для загрузки и почти полный сбой жесткого диска. диск, поэтому нет места для подключения любого второго диска PATA для локальной передачи.
Чтобы обойти это, у меня есть второй компьютер с тем же единственным разъемом PATA на материнской плате, к которому я подключил другой привод CD-ROM для загрузки и целевой жесткий диск.
Я загрузил оба компьютера с помощью привода CD-ROM, чтобы запустить System Rescue CD 5.0.3, и я рассматриваю свои варианты, как максимально эффективно клонировать отказавший диск.
Компьютеры доступны по локальной сети, и я подключаюсь к ним обоим удаленно через SSH через терминал без графического интерфейса.
Я не слишком уверен в размерах исходного диска и целевого диска. Вполне возможно, что исходный диск имеет большую емкость, чем целевой диск, поэтому в идеале я хотел бы перенести только использованное пространство, а не пробежаться по всему пустому диску.
Я подумывал об использовании ddrescue, как описано здесь ; однако он описывает только передачу данных локально.
ОБНОВЛЕНИЕ: я смотрю, как установщик Debian настроил исходный диск. Похоже, у меня есть три раздела, и только последний зашифрован:
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.
Я полагаю, что я также пытаюсь перенести данные между дисков одинаковой емкости: диск PATA 40 ГБ на другой диск PATA 40 ГБ.
Вот пункт назначения:
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
ОБНОВЛЕНИЕ: я рассматриваю возможность использования NBD для выставления разделов исходного диска через локальную сеть, чтобы использовать ddrescue от места назначения.
Вот то, что я пытался до сих пор выставлять исходный диск ...
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 ГБ места для последнего раздела.
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 ГБ дискового пространства.
Давайте размонтируем, но сохраним это на карте:
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
В результате получилось изображение того же размера, что и исходный раздел, поэтому, похоже, это не исключает неиспользуемого пространства.
Я сейчас пытаюсь использовать fsarchiver :
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 МБ, а файл .fsa - только 24 МБ, поэтому, возможно, он сжат. Это лучше, чем оригинальные 120 МБ.
Теперь давайте попробуем с корневым разделом 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
Вещи выглядят как ожидалось.
Я верю, что мне все еще не хватает того, что я думаю, что это испортит Grub. Кажется, я кое-что вспомнил о начальной загрузке Stage 1 из MBR, но затем он не смог найти Stage 2 в разделе /boot, когда я пытался сделать что-то подобное в прошлый раз.
Эта страница привела к этому, который описывает, как восстановить 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-битную
Возможно, мне придется повторить эту часть, перезагрузив System Rescue CD через rescue64. Я не уверен, что при загрузке по умолчанию запускается 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 ГБ - это всего четыре раза по 10 ГБ, которые я перенес прошлой ночью и не занял слишком много времени. LAN.
Я не мог сделать это прошлой ночью, потому что не мог заставить работать NBD, поэтому я прибег к сохранению в файлы изображений. Я не могу этого сделать, если я делаю полное клонирование диска, поэтому давайте посмотрим, работают ли каналы или именованные каналы лучше.
Итак, вернемся к началу: оба компьютера теперь загрузились с загрузочного компакт-диска System Rescue CD, оба доступны по сети через соответствующие IP-адреса, назначенные DHCP, и у обоих был установлен пароль root с помощью команды 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. Ну что ж.
Теперь у меня есть /root/tempsrc.dat, который содержит образ диска, такой как образ SD-карты, который я хочу перенести в удаленный пункт назначения. На первом разделе находится файл с именем note1.txt
, а третий раздел зашифрован и имеет 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 ГБ диск на временный третий диск и включил ПК назначения.
Давайте начнем с настройки этого нового диска:
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" архиватором по причине. Давайте попробуем пристрастие.
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 ГБ диска, я думаю, что 100 Мбит / с LAN. На данный момент выходной утверждает, что это будет сделано примерно через час.