Восстановление файловой системы ext4 с поврежденным журналом

У меня есть жесткий диск, который, похоже, разработал какую-то аппаратную проблему в журнале. Это предотвращает загрузку накопителя. Запуск mount -r -t ext4 /dev/sda5 /mnt/root приводит к следующему ядру ядра:

 [ 1420.671055] ata1.00: exception Emask 0x0 SAct 0x1000000 SErr 0x0 action 0x0 [ 1420.673862] ata1.00: irq_stat 0x40000008 [ 1420.676600] ata1.00: failed command: READ FPDMA QUEUED [ 1420.679326] ata1.00: cmd 60/40:c0:a8:9d:0a/00:00:08:00:00/40 tag 24 ncq 32768 in [ 1420.679326] res 41/40:40:e1:9d:0a/00:00:08:00:00/00 Emask 0x409 (media error) <F> [ 1420.685014] ata1.00: status: { DRDY ERR } [ 1420.687858] ata1.00: error: { UNC } [ 1420.761064] ata1.00: configured for UDMA/133 [ 1420.763863] sd 0:0:0:0: >[sda] Unhandled sense code [ 1420.766653] sd 0:0:0:0: >[sda] [ 1420.769364] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 1420.772104] sd 0:0:0:0: >[sda] [ 1420.774780] Sense Key : Medium Error [current] [descriptor] [ 1420.777491] Descriptor sense data with sense descriptors (in hex): [ 1420.780249] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 [ 1420.783175] 08 0a 9d e1 [ 1420.785972] sd 0:0:0:0: >[sda] [ 1420.788730] Add. Sense: Unrecovered read error - auto reallocate failed [ 1420.791545] sd 0:0:0:0: >[sda] CDB: [ 1420.794331] Read(10): 28 00 08 0a 9d a8 00 00 40 00 [ 1420.797242] end_request: I/O error, dev sda, sector 134913505 [ 1420.800072] ata1: EH complete [ 1420.800077] JBD2: Failed to read block at offset 2748 [ 1420.812529] JBD2: recovery failed [ 1420.815275] EXT4-fs (sda5): error loading journal 

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

  • ext4 inodes, которые используются для отсутствующих файлов
  • независимо убедитесь, что TRIM действительно работает на SSD
  • Нет доступа к папке symlink на разделе NTFS
  • Что такое commit = 0 для ext4? mdadm не поддерживает его?
  • Как определить новый размер для resize2fs?
  • Уменьшить изображение
  • Зарегистрировать обратный вызов для вновь вставленного диска?
  • Разрешения на файловую систему ext4 на съемном диске, используемом на разных машинах
  • 3 Solutions collect form web for “Восстановление файловой системы ext4 с поврежденным журналом”

    Посмотрите на вывод smartctl -a /dev/sda . Если это не проблема с кабелем, тогда диск может умереть. Если у вас нет последней резервной копии, попробуйте скопировать содержимое блочного устройства (без монтажа) с помощью dd_rescue или dd с соответствующими параметрами.

    После этого вы можете попробовать hdparm --write-sector (всегда смешно эти «ОЧЕНЬ ОПАСНЫЕ» варианты …).

    Другой вариант – создать DM-устройство, которое обходит дефектные сектора. Конечно, это не восстанавливает их содержимое. Вы должны преобразовать смещение sda (134913505) в смещение sda5 (узнать номер первого сектора sda5 и вычесть его). Предположим, что смещение sda5 составляет 12345. Вы создаете блочное устройство, сектор 12345 которого не отображается на sda5, а где-то еще (например, устройство loop). Определение устройства (для создания dmsetup) выглядит следующим образом:

     0 12345 linear /dev/sda5 0 12345 1 linear /dev/loop0 0 12346 99987653 /dev/sda5 12345 # format: # logical_start_sector num_sectors linear destination_device start_sector 

    Вам не повезет, что есть только один дефектный сектор. Вы можете отобразить столько, сколько хотите (в результате устройство DM, обеспечивающее нули для этих секторов, но доступное для записи), но вычисление смещений в loop0 может стать забавным. Другим вариантом было бы использовать виртуальное устройство такого же размера для переназначения и использовать либо тонкую инициализацию, либо моментальный снимок (с небольшим размером блока, например, 1 сектор) нулевого целевого устройства.

    Редактировать 1

    Конечно, устройство цикла не должно указывать на файл на том же диске (sda).

    Чтобы смонтировать его только для чтения, без повторения журнала, чтобы вы могли получить доступ к своим файлам (вы, вероятно, потеряете некоторые изменения, которые еще не были зафиксированы для регулярных fs):

    mount -o ro,noload

    Вы можете загрузиться в режиме восстановления, в котором FS будет монтироваться только для чтения и скопировать ваши материалы.

    Linux и Unix - лучшая ОС в мире.