Как правильно клонировать слегка поврежденный SSD на новый

408
confetti

Так что недавно мой старый SSD (содержащий / root + / home разделы для моей системы) сломался (подробности в этом вопросе ), и я пошел, чтобы получить новый. Теперь я хотел клонировать его, но столкнулся со следующими проблемами:

$ pv /dev/sdd > /dev/sda 4.24GiB 0:00:18 [ 234MiB/s] [==> ] 7% ETA 0:03:55 pv: /dev/sdd: read failed: Input/output error  $ dd if=/dev/sdd of=/dev/sda bs=1M status=progress dd: error reading '/dev/sdd': Input/output error 4397+1 records in 4397+1 records out 4611493888 bytes (4.6 GB, 4.3 GiB) copied, 22.0249 s, 209 MB/s 

Старый SSD все еще работает. Есть много зависаний системы из-за повреждения, но я могу разблокировать, смонтировать и использовать все еще довольно хорошо. Я могу получить доступ ко всем данным (AFAIK) и полное резервное копирование, используя tarхорошо работали.

Причины, по которым я бы предпочел прямое клонирование, а не tarкопирование файлов по файлам (или ):

  1. удобство
  2. скорость
  3. Довольно сложное шифрование на диске, которое я бы предпочел не переустанавливать снова

Этот сайт предлагает использовать conv=noerrorс dd, но я не уверен, безопасно это или нет. У меня такие же опасения по поводу dd_rescueи клонезиллы -rescue.

Вопрос : Как я могу безопасно клонировать мой старый SSD на новый, и достаточно ли md5sumпроверки после этого, чтобы убедиться, что клон был на 100% успешным?

Сайт, на который я ссылался выше, предлагает использовать gparted для проверки успешности клонирования, но AFAIK gparted не работает с зашифрованными разделами LUKS. (Для усложнения: заголовок LUKS отсоединен.)

Дополнительный вопрос : расшифровка моего диска выполняется при загрузке с использованием grub и идентификатора раздела (не UUID). Достаточно ли мне обновить идентификатор в моей конфигурации crypttab и grub или мне нужно сделать больше?


Редактировать : я только что понял, что md5sum, скорее всего, не сможет прочитать диск, а. Есть ли другой способ безопасно определить, был ли клон успешным?


ОБНОВЛЕНИЕ: Таким образом, я попробовал clonezilla с -rescueвыбором. Это, казалось, работать, и я могу открыть контейнер LUKS раскрыть LVM, но когда я пытаюсь смонтировать корневой раздел, я получаю следующее:

$ sudo mount /dev/mapper/vvg-root /mnt/sda mount: wrong fs type, bad option, bad superblock on /dev/mapper/vvg-root, missing codepage or helper program, or other error 

Соответствующие данные из dmesg:

[ 4686.401702] JBD2: no valid journal superblock found [ 4686.401707] EXT4-fs (dm-3): error loading journal 

Так что я думаю, что это не сработало, как планировалось. У кого-нибудь есть идея получше, пожалуйста?


ОБНОВЛЕНИЕ 2: Я запустил fsck.ext4 -yvраздел нового диска. Я был залит ошибками. В миллионах. Теперь я могу его смонтировать, но почти все мои файлы отсутствуют. Каталог / home, среди многих других, полностью отсутствует. На нем должно быть около 30-35 ГБ данных. Теперь это 53 МБ.

Мой единственный вариант действительно откатить tarрезервную копию, которая у меня есть? Я думаю, что лучше сделать копию rsync «один на один», так как это сообщит о повреждении / нечитаемости определенного файла, верно? Я использовал, --verifyкогда я сделал tarархив, хотя он не сообщал об ошибках.

3
[Clonezilla] (https://www.clonezilla.org/) с включенной опцией `-rescue` в режиме« Эксперт ». Alex 6 лет назад 0
@ Алекс Что именно это делает? Я предполагаю, что это просто работает как `dd_rescue`, просто игнорируя / пропуская ошибки ввода-вывода? Это немного пугает меня, я был бы очень признателен за разработку того, как это работает и насколько безопасно его использовать. confetti 6 лет назад 0
Да, clonezilla пытается прочитать несколько раз поврежденные секторы, и если это не удалось, то он идет дальше, копируя остальную часть содержимого так же, как это делает `dd_rescue`. Сначала я попытался бы создать образ с помощью clonezilla, чтобы убедиться, что хотя бы существующие данные сохранены, а затем попытаться «вылечить» ssd с помощью низкоуровневого инструмента, такого как mhdd или victoria, чтобы заставить внутренний контроллер ssd заменить поврежденные сектора. Инструмент низкого уровня хорошо работает на механических дисках, но редко помогает на дисках ssd. Alex 6 лет назад 0
@ Алекс Я собираюсь создать изображение с помощью `dd_rescue`, а затем изучить эти инструменты. confetti 6 лет назад 0
Будьте осторожны с `dd_rescue`, он очень старается прочитать сломанную часть диска, которая может вызвать еще больший ущерб SSD (когда внутренняя прошивка пытается заменить поврежденные сектора здоровыми, но не осталось запасных ячеек). Alex 6 лет назад 0
@Alex Разве клонезилла `-rescue` не сделала бы то же самое? confetti 6 лет назад 0
Не так сложно, как это делает `dd_rescue` (принудительное чтение несколько раз), clonezilla просто пропускает поврежденные сектора, а опция -rescue` - простой флаг, позволяющий не давать сбой и останавливаться на ошибках, а вместо этого продолжать копировать остальную часть содержимого. Alex 6 лет назад 0
@ Алекс Я добавил обновление в свой вопрос. После `-rescue` копии CloneZilla я не могу смонтировать раздел. confetti 6 лет назад 0
Самая большая проблема в вашем случае это шифрование LUKS. ИМХО единственный способ восстановить данные сейчас - это заставить SSD переназначить поврежденные сектора (инструменты: Victoria, MHDD, HDD Regenerator) или найти кого-то, кто имеет аппаратный инструмент PC-3000. Сколько SMART сообщило о перемещениях в атрибуте № 5? Если у этого значения мало повторов, тогда есть шанс восстановить его. Alex 6 лет назад 0
Интеллектуальные значения @Alex для # 5: `VALUE: 099, WORST: 099, THRESH: 010, RAW_VALUE: 53248` - Имейте в виду, что у меня нет реальной необходимости восстанавливать данные. У меня есть полная резервная копия tar, которая, кажется, в порядке (для проверки использовалась `--verify`). Я думаю, что на данный момент самым простым способом было бы создать новый SSD с нуля (шифрование и LVM), а затем смонтировать старый SSD (который все еще работает) и скопировать данные с него на новый с помощью rsync. Я сейчас скачиваю загрузочный компакт-диск нанятого, чтобы попробовать. confetti 6 лет назад 0
Я думаю, что с таким огромным `RAW_VALUE: 53248` этот SSD - мертвая лошадь, но вы можете попробовать. Удостоверьтесь, что завершили по крайней мере два полных сканирования, которые закончились с нулевым повторным отображением, и сделайте клон как можно скорее, если у вас получится. Alex 6 лет назад 0

2 ответа на вопрос

0
Willyuiop

Во-первых, я бы порекомендовал не использовать SSD и не запускать на нем тесты, потому что это может привести к его дальнейшему выходу из строя, у меня когда-то был диск, который я ремонтировал, и после выполнения некоторых проверок целостности он не давал самому себе быть прочитанным вообще. Если вы по-прежнему можете видеть его из отдельной системы, он все равно должен быть сохранен, хотя использование может привести к прекращению чтения чипов, поэтому я попробую выполнить полное клонирование, прежде чем делать что-либо еще. Я рекомендую использовать Clonezilla от USB, чтобы защитить SSD от ненужных операций чтения / записи во время клонирования. когда вы клонировали его, md5sum будет лучшим способом подтвердить, что все это есть, хотя это может быть ненадежно в случае сбоя. Преимущество использования клонирующей ОС или аппаратного клонера заключается в том, что все данные копируются по секторам.

Это не совсем отвечает на мой вопрос. Я больше не использую SSD, и я согласен с вашими мнениями, однако «полный клон» * - это то, что я пытаюсь. AFAIK делает clonezilla `clonepart` не работающим с полными дисками (поправьте меня, если я ошибаюсь, пожалуйста), и clonezilla` dd` по сути то же самое, что и использование `dd` из другой системы. Кстати: я пытаюсь все это на живой системе Манджаро, когда SSD отключен и заблокирован. Кроме того, используя `pv` или` dd`, копирование также выполняется по секторам. «Клонирование ОС» не более чем использование обычных инструментов UNIX. confetti 6 лет назад 1
@confetti Clonezilla может выполнять полное клонирование диска, когда вы выбираете опцию «диск-образ» или «диск-диск» Alex 6 лет назад 0
@ Алекс Я спрашиваю о базовом инструменте, который использует клонезилла для клонирования. Я не использовал clonezilla какое-то время, но я помню, когда в последний раз я использовал его для клонирования диска, который использовался `dd`. confetti 6 лет назад 0
НЕТ, clonezilla использует `dd`, только если вы спросили об этом. Alex 6 лет назад 0
@confetti Он использовал базовый инструмент в следующем порядке: `partclone` (по умолчанию),` partimage` (необязательно), `ntfsclone` (необязательно) или` dd` в качестве крайней меры, когда он не может определить файловые системы. Alex 6 лет назад 0
@ Alex Это то, о чем я думал, однако AFAIK `partclone` и` partimage` доступны только при работе с разделами, а не с полными дисками. `ntfsclone` тоже не вариант, так как это не NTFS, поэтому в моем случае это закончится использованием` dd`. Я загружаю clonezilla прямо сейчас, чтобы увидеть, но я почти уверен, что это был последний раз, когда я пытался это сделать. confetti 6 лет назад 0
@confetti Clonezilla - это не просто LiveCD, который просто запускает `partclone`; если вы выполните полное клонирование` диск-образ / диск`, он воссоздаст всю структуру диска, включая MBR / GPT, а также все разделы, представленные на диск. Alex 6 лет назад 0
@Alex Так что я только что попробовал и да, `dd` - это то, что используется clonezilla для операций с диска на диск. Я использовал `-rescue` и все закончилось. Каким должен быть мой следующий шаг? confetti 6 лет назад 0
@confetti Странно, что clonezilla использовал `dd`, обычно он прибегает к этому методу только тогда, когда не может понять файловую систему. У меня большой опыт работы с Викторией, чтобы заставить прошивку заменить битые сектора. Единственное, для этого требуется режим IDE в BIOS. Это не будет работать на AHCI. В расширенном или классическом режиме повторного сканирования он заставит внутренний контроллер заменить поврежденные ячейки на запасные. Alex 6 лет назад 0
@ Алекс Я посмотрел на этот инструмент, но, видимо, он работает только на Windows. Есть ли альтернатива Linux? Я слышал, что запись в поврежденный блок заставит диск повторно сопоставить его, но перезапись данных не совсем то, что мне нужно ... Кроме того: Ну, вполне может быть, что clonezilla не может понять файловая система в виде маскированного (отдельного заголовка) зашифрованного диска LUKS. confetti 6 лет назад 0
@confetti Если это LUKS диск, то это объясняет, почему `dd` использовал. Что касается Виктории, нет, - Windows-версия не та, что я упомянул, вам нужно найти загрузочный компакт-диск Hiren, есть версия DOS (которая работает в реальном режиме), используйте русскую версию, так как она самая последняя (есть несколько слов, которые нужно перевести, все остальное на английский). Используйте `P`, чтобы выбрать канал SATA, затем F4, чтобы сканировать с« классическим переотображением ». Vicroria не перезаписывает поврежденные сектора, она пытается сначала извлечь данные в ОЗУ, затем выполнить многократную запись в поврежденный сектор, чтобы вызвать переназначение, а затем восстановить сектор в том же месте. Используйте IDE в BIOS с Викторией Alex 6 лет назад 0
0
confetti

Сделав то, что я сказал в своем вопросе, я закончил тем, что сделал следующее:
1) Удалите LVM на новом SSD после неудачной копии CloneZilla.
2) Я не трогал внешний dm-склеп, так как он работал хорошо.
3) Я заново создал новый LVM и изменил размер всего, чтобы соответствовать новому (большему) SSD.

(Это относится только к моему случаю, поэтому шрифт поменьше, см. Вопрос обновления)

Теперь для клонирования:

1) После разблокировки я смонтировал оба корневых раздела SSD в работающей системе:

# unlock the LUKS containers with cryptsetup first mount /dev/mapper/ovvg-root /mnt/oldssd mount /dev/mapper/vvg-root /mnt/newssd 

2) Я использовал rsync для клонирования файлов:

rsync -ahv --progress /mnt/oldssd /mnt/newssd 

3) Подтвердили, что размеры всех папок совпадают:

du -cs /mnt/oldsdd/* && echo " " && du -cs /mnt/newssd/* 

4) Подтвердили, что все файлы есть, чтобы перепроверить:

find /mnt/oldssd | cut -d "/" - f 4- | sort > oldssd.txt find /mnt/newssd | cut -d "/" - f 4- | sort > newssd.txt diff oldssd.txt newssd.txt 

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

5) Удовлетворил мою паранойю, проверив контрольные суммы:

cd /mnt/oldssd && find . -type f -exec md5sum {} \; | sort > /root/oldssd_md5.txt cd /mnt/newssd && find . -type f -exec md5sum {} \; | sort > /root/newssd_md5.txt cd /root && diff oldssd_md5.txt newssd_md5.txt 

Нет вывода вообще - это означает, что каждый файл одинаков!

Что касается бонусного вопроса:

1) Измените путь к устройству (используя UUID) в /etc/fstab
2) Измените путь к устройству (используя by-id) в /etc/default/grub
3) Поскольку сейчас я не могу выполнить chroot в своей системе, я изменил grub.cfgнепосредственно, чтобы отразить изменение диска by-id- Однако лучше всего не делайте этого и вместо этого сделайте chroot в корневой системе и перенастройте загрузчик GRUB. Я сразу сделал это после загрузки в систему с нового SSD.

Сложнее, чем хотелось бы, но, по крайней мере, это сработало безопасно.

Похожие вопросы