«Ошибка ввода / вывода» при доступе к каталогу

80

Я хочу перечислить и удалить содержимое каталога на съемном жестком диске. Но я испытал «Ошибка ввода / вывода»:

$ rm  pic -R
rm: cannot remove `pic/60.jpg': Input/output error
rm: cannot remove `pic/006.jpg': Input/output error
rm: cannot remove `pic/008.jpg': Input/output error
rm: cannot remove `pic/011.jpg': Input/output error

$ ls -la pic
ls: cannot access pic/60.jpg: Input/output error
-????????? ? ?    ?         ?            ? 006.jpg
-????????? ? ?    ?         ?            ? 006.jpg
-????????? ? ?    ?         ?            ? 011.jpg

Мне было интересно, в чем проблема?

Как я могу восстановить или удалить каталог picи все его содержимое?

Моя ОС - Ubuntu 12.04, а съемный жесткий диск имеет файловую систему ntfs. Другие каталоги, не содержащие или не находящиеся picна съемном жестком диске, работают нормально.


Добавлено:

Последняя часть вывода dmesgпосле того, как я попытался перечислить содержимое каталога:

[19000.712070] usb 1-1: new high-speed USB device number 2 using ehci_hcd
[19000.853167] usb-storage 1-1:1.0: Quirks match for vid 05e3 pid 0702: 520
[19000.853195] scsi5 : usb-storage 1-1:1.0
[19001.856687] scsi 5:0:0:0: Direct-Access     ST316002 1A               0811 PQ: 0 ANSI: 0
[19001.858821] sd 5:0:0:0: Attached scsi generic sg2 type 0
[19001.861733] sd 5:0:0:0: [sdb] 312581808 512-byte logical blocks: (160 GB/149 GiB)
[19001.862969] sd 5:0:0:0: [sdb] Test WP failed, assume Write Enabled
[19001.865223] sd 5:0:0:0: [sdb] Cache data unavailable
[19001.865232] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[19001.867597] sd 5:0:0:0: [sdb] Test WP failed, assume Write Enabled
[19001.869214] sd 5:0:0:0: [sdb] Cache data unavailable
[19001.869218] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[19001.891946]  sdb: sdb1
[19001.894713] sd 5:0:0:0: [sdb] Test WP failed, assume Write Enabled
[19001.895950] sd 5:0:0:0: [sdb] Cache data unavailable
[19001.895953] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[19001.895958] sd 5:0:0:0: [sdb] Attached SCSI disk
[19113.024123] usb 2-1: new high-speed USB device number 3 using ehci_hcd
[19113.218157] scsi6 : usb-storage 2-1:1.0
[19114.232249] scsi 6:0:0:0: Direct-Access     USB 2.0  Storage Device   0100 PQ: 0 ANSI: 0 CCS
[19114.233992] sd 6:0:0:0: Attached scsi generic sg3 type 0
[19114.242547] sd 6:0:0:0: [sdc] 312581808 512-byte logical blocks: (160 GB/149 GiB)
[19114.243144] sd 6:0:0:0: [sdc] Write Protect is off
[19114.243154] sd 6:0:0:0: [sdc] Mode Sense: 08 00 00 00
[19114.243770] sd 6:0:0:0: [sdc] No Caching mode page present
[19114.243778] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[19114.252797] sd 6:0:0:0: [sdc] No Caching mode page present
[19114.252807] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[19114.280407]  sdc: sdc1 < sdc5 >
[19114.289774] sd 6:0:0:0: [sdc] No Caching mode page present
[19114.289779] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[19114.289783] sd 6:0:0:0: [sdc] Attached SCSI disk
Тим
источник
1
Ошибка ввода-вывода может быть аппаратной проблемой (повреждение оперативной памяти или жесткого диска). Это также может означать повреждение файловой системы или ошибку драйвера; так как это NTFS, я не исключаю этого.
Жиль

Ответы:

36

Ошибки ввода / вывода при попытках доступа к файловой системе обычно означают аппаратные проблемы.

Введите dmesgи проверьте последние несколько строк вывода. Если диск или подключение к нему не удается, это будет отмечено там.

РЕДАКТИРОВАТЬ Вы монтируете его через ntfsили ntfs-3g? Насколько я помню, устаревший ntfsдрайвер не имел поддержки стабильной записи и был в основном заброшен, когда оказалось, что ntfs-3gон значительно более стабилен и безопасен.

Shadur
источник
3
Я подключаю съемный жесткий диск к своей Ubuntu 12.04, и он автоматически монтируется. Так я думаю ntfs-3g?
Тим
8
Не " угадай ". Проверьте - вы можете увидеть, как все монтируется, набрав mountкоманду и глядя на вывод.
Шадур
1
(1) Я добавил последнюю часть вывода dmesgпосле того, как попытался составить список содержимого каталога. Я не знаю, как это помогает. (2) Я не могу увидеть, смонтирован ли он с помощью nfts-3g или ntfs, посмотрев на вывод mount:/dev/sdb1 on /media/removable_drive type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)
Tim
2
fuseblkозначает, что он использует метод fuserфайловая система в пользовательском пространстве, что и ntfs-3gиспользуется. Так что ты хорош в этом отношении.
Шадур
20

Как утверждает Садхур, это, вероятно, вызвано аппаратными проблемами на диске, и dmesgвыходной файл - правильное место, чтобы проверить это.

Вы можете выполнить сканирование поверхности вашего диска из Linux /sbin/badblocks /dev/sda.

Проверьте страницу руководства для более тщательного тестирования основных исправлений (перемещение блоков). Все это не зависит от файловой системы, поэтому является безопасным даже для файловой системы NTFS, поскольку работает на уровне «поверхности диска».

Я лично сделал это для запуска ежемесячно от cron. Конечно, вам нужно проверить, получаете ли вы письма cron в своем почтовом ящике (что по умолчанию часто не так). Эти письма заканчиваются /var/mail/$USERили похожи.

Я создал /etc/cron.d/badblocks:

30 4 * * 3 root [ -x /sbin/badblocks ] && [ $(date +\%d) -le 7 ] && /sbin/badblocks /dev/sda
jippie
источник
Спасибо! Для запуска команды, которую вы предложили, это /sbin/badblocks /media/removable_driveв моем случае?
Тим
Нет. Согласно выводу dmesg вы должны использовать sdb: /sbin/badblocks /dev/sdbили sdc. Я действительно не могу понять, что случилось / вы сделалиdmesg
Jippie
Вы можете найти свой /dev/sd{x}диск с fdisk -lкомандой
lucidyan
помните, что приложение badblocks принимает блоки начала и конца для работы в случае, если вы хотите «приостановить / возобновить» :)
Aquarius Power
9

Ваша файловая система повреждена, для томов NTFS вы должны запустить систему chkdskпод Windows, но восстановить ее практически невозможно. Иногда вам может понадобиться отформатировать диск.

маргаритка
источник
Спасибо! Мои другие каталоги в порядке. Могу ли я не отформатировать весь диск, просто освободить место в каталоге?
Тим
1
@ Тим, тебе пришлось скопировать все остальное, отформатировать и скопировать их обратно ... я не знаю, можно ли удалить один узел ... не знаком со структурой NTFS
маргаритка
3
Перед форматированием попробуйте badblocksкомманду в Linux.
Джиппи
7

Решение, которое работает для меня, - понизить ntfs-3gверсию с выпуска 2014 года до выпуска 2012 года. Это должно решить вашу проблему с доступом к разделу NTFS. В долгосрочной перспективе это не решение, потому что в конечном итоге вам потребуется запустить последнюю версию.

Больше информации здесь

GAD3R
источник
3
Огромное спасибо. Это решило мою проблему. Я установил последний стабильный выпуск (2016.2.22) из ​​исходного кода, и теперь он работает безупречно. Инструкции по установке я использовал: tuxera.com/community/open-source-ntfs-3g
Рикардо Перейра
Хорошо, это хорошо знать. Таким образом, в основном существует окно между 2012 и началом 2016 года, в течение которого привод просто не работал.
2

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

Алан Кэмпбелл
источник
2

Никто не упомянул, что делать, если инструменты Linux не работают и доступен только Mac, но не Windows.

Может быть исправлено в OS X с Paragon NTFS

В моем случае gpartedсказали пойти найти ПК с Windows, который нигде не было найдено. Но рядом был Mac, для которого доступно это замечательное программное обеспечение. Установил пробную версию, выполнил проверку , затем чинил - и вуаля!

BVengerov
источник
У меня был случай на macos, когда такая ошибка была вызвана использованием sshfs (вроде бы) в сборке инструментария. Помогла установка osxfuse & sshfs через brew.
SDD
2

Я просто хотел поделиться своим опытом: во FreeBSD 10.3 я подключил свой внешний жесткий диск с

$ sudo ntfs-3g /dev/da0s1 /media

Внутри жесткого диска я mkdirсоздал папку, а затем переместил в нее несколько файлов, конечно, с помощью mvкоманды. Наконец я выполнил следующую команду:

$ sudo sync

Затем я смонтировал жесткий диск на машине Linux с ядром 4.4.0-78-generic. Теперь, когда я перечисляю содержимое жесткого диска, каталог, созданный во FreeBSD, назван Jeff, как показано ниже:

$ ls -lhrtci
ls: cannot access 'Jeff': Input/output error
total 20K
  ? d????????? ? ?    ?       ?            ? Jeff

введите описание изображения здесь

Также при попытке удалить Jeffкаталог я получаю следующее сообщение об ошибке:

$ sudo rm -f -R Jeff
rm: cannot remove 'Jeff': Input/output error

введите описание изображения здесь

Я не смог избавиться от Jeffкаталога на машине с Linux, поэтому я использовал машину с FreeBSD и снова смонтировал жесткий диск на FreeBSD. Но ls, cdи rmкоманды на FreeBSD генерировать то же самое Input/output error. Похоже, в ntfs-3gпакете FreeBSD была ошибка .


ОБНОВИТЬ

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

$ sudo mkfs.ntfs /dev/sdb1

А затем переместил все данные обратно на внешний том. Таким образом, я потерял поврежденный файл с именем Jeff, однако мой внешний жесткий диск очищен от любых ошибок ввода-вывода.

user3405291
источник
0

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

cagcak
источник