1

Я хотел бы знать, как лучше всего приступить к клонированию моего жесткого диска до такой степени, что я смогу просто вставить клонированный диск в мой компьютер и без проблем загрузиться с него, как в настоящее время я делаю с существующим диском.

У меня есть жесткий диск, на котором запущен 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. На данный момент выходной утверждает, что это будет сделано примерно через час.

1 ответ1

0

Ну, похоже, я был на правильном пути с промежуточным приводом. Это не то, что я собирался сделать изначально, но это помогло мне преодолеть мою проблему.

Новый диск теперь является клоном оригинального диска и приятно гудит.

Чтобы клонировать мой оригинальный привод с представленными ограничениями - в частности, требуя перебрать локальную сеть с компакт-диском System Rescue без Clonezilla - я смог пройти через это следующим образом.

Во-первых, у меня был временный жесткий диск на 160 ГБ, подключенный к запасному ПК, как описано выше, и я загрузил оба компьютера с моего загрузочного компакт-диска System Rescue CD.

Со своего ПК src я установил жесткий диск объемом 160 ГБ на ПК- dest локально, используя sshfs а затем запустил ddrescue как описано выше, для создания образа неисправного жесткого диска на жесткий диск объемом 160 ГБ в виде файла образа. Этот диск объемом 40 ГБ был преобразован в файл образа объемом 40 ГБ, и на его подключение к локальной сети со скоростью 100 Мбит / с ушло около часа.

Я собираюсь сохранить это изображение, чтобы мне не пришлось делать это снова; начиная с этого момента, инкрементных резервных копий данных должно быть достаточно для восстановления после того, как этот исходный образ был захвачен.

После того, как эта фаза была завершена, мне пришлось заменить неисправный диск на 40 ГБ на заменяющий диск, который, как оказалось, имеет такую же емкость 40 ГБ на хосте src не касаясь и даже не dest .

Затем я снова включил src с загруженным компакт-диском System Rescue, снова подключил каталог 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

Это заняло около часа, чтобы завершить.

Поскольку это был образ полного диска, а не разделов, я смог просто извлечь компакт-диск и перезагрузить src , и все было так, как было.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .