У меня довольно простая система с Ubuntu 16.04, 1 HDD и несколькими разделами:
sda1 - EXT4 - 100G - / sda2 - EXT4 - 723.5G - /home sda3 - NTFS - 100G - (windows) sda5 - SWAP - 8G
Всякий раз, когда я пытаюсь получить доступ к одному из 3-4 файлов в определенном каталоге в /home
раздел (конкретная папка, вызывающая проблемы /home/path/to/broken/folder
), раздел /home
выдаст ошибку и перемонтирует только для чтения. dmesg
показывает следующие ошибки:
EXT4-fs error (device sda2): ext4_ext_check_inode:497: inode #1415: comm rm: pblk 0 bad header/extent: invalid magic - magic 0, entries 0, max 0(0), depth 0(0) Aborting journal on device sda2-8. EXT4-fs (sda2): Remounting filesystem read-only EXT4-fs error (device sda2): ext4_ext_check_inode:497: inode #1417: comm rm: pblk 0 bad header/extent: invalid magic - magic 0, entries 0, max 0(0), depth 0(0) EXT4-fs error (device sda2): ext4_ext_check_inode:497: inode #1416: comm rm: pblk 0 bad header/extent: invalid magic - magic 0, entries 0, max 0(0), depth 0(0)
Итак, я понимаю, что происходит ... какой-то плохой блок вызывает ошибку и перемонтирует диск только для чтения, чтобы предотвратить дальнейшее повреждение. Я знаю, что это именно эти конкретные файлы, потому что я могу отменить ошибку путем
sync
lightdm
(и все подпроцессы) /home
, найдя их с помощью lsof | grep /home
/home
fsck /home
(исправление ошибок ) /home
Все снова в порядке, чтение и запись, , пока я не попытаюсь снова получить доступ к тем же файлам , тогда весь этот процесс повторил, чтобы исправить это снова.
Я попытался получить доступ к файлам, запустив ls /home/path/to/broken/folder
и rm -r /home/path/to/broken/folder
, поэтому кажется, что любая операция с жестким диском на этой части диска приводит к ошибкам и снова выбрасывает его только для чтения.
/home/path/to/broken/folder
, но каждый раз, когда я пытаюсь это сделать, она терпит неудачу и выбрасывается только для чтения.
Как это исправить, не переформатировав весь диск /home
?
РЕДАКТИРОВАТЬ 1:
Я запустил badblocks -v /dev/sda2
на своем жесткий диск, но он вышел чистый, без плохих блоков. Любая помощь все равно будет принята с благодарностью.
РЕДАКТИРОВАТЬ 2:
Все еще ищете решение этой проблемы. Некоторая информация, которая может быть полезна ниже:
$ debugfs -R 'stat <1415>' /dev/sda2 debugfs 1.42.13 (17-May-2015) Inode: 1415 Type: regular Mode: 0644 Flags: 0x80000 Generation: 0 Version: 0x00000000 User: 0 Group: 0 Size: 0 File ACL: 0 Directory ACL: 0 Links: 1 Blockcount: 0 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x5639ad86 -- Wed Nov 4 01:02:30 2015 atime: 0x5639ad86 -- Wed Nov 4 01:02:30 2015 mtime: 0x5639ad86 -- Wed Nov 4 01:02:30 2015 Size of extra inode fields: 0 EXTENTS:
Теперь я сам посмотрел на это и сравнил его с тем, что я подозреваю, что он не поврежден:
$ debugfs -R 'stat <1410>' /dev/sda2 debugfs 1.42.13 (17-May-2015) Inode: 1410 Type: regular Mode: 0644 Flags: 0x80000 Generation: 0 Version: 0x00000000 User: 0 Group: 0 Size: 996 File ACL: 0 Directory ACL: 0 Links: 1 Blockcount: 0 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x5639ad31 -- Wed Nov 4 01:01:05 2015 atime: 0x5639ad31 -- Wed Nov 4 01:01:05 2015 mtime: 0x5639ad31 -- Wed Nov 4 01:01:05 2015 Size of extra inode fields: 0 EXTENTS: (0):46679378
Я выделил жирным шрифтом я верю, что здесь есть ключевые различия. Я посмотрел на другие не поврежденные иноды, и они отображают нечто похожее на 1410
, которое имеет ненулевой размер и экстент.
Плохой заголовок / экстент здесь имеет смысл ... он не имеет степени .... как мне это исправить?
Я действительно чувствую, что передал этот вопрос кому-то умнее, чем я на серебряном блюде, я просто не знаю, что такое еда (ответ)!
Наконец найденный ответом от кого-то еще на другом сайте, просто обнулил inodes и перепроверил систему, которая была всем!
debugfs -w /dev/sda2 :clri <1415> :clri <1416> :clri <1417> :q fsck -y /dev/sda2
кому-либо еще с этой проблемой, я нашел свой плохой inodes использованием find
на плохом монтировании, затем проверил dmesg
на ошибки на плохом inodes.