Назад | Перейти на главную страницу

USB-накопитель меняет имя с / dev / sdb на / dev / sdc (и обратно) при копировании?

У меня есть USB-накопитель, подключенный к папке в установке сервера Ubuntu 9.04. Параметры монтирования хранятся в / etc / fstab для облегчения монтажа / демонтажа:

# <file system> <mount point>   <type>  <options>          <dump>  <pass>   
/dev/sdb1       /media/backup   ntfs    nouser,auto,sync    0      3 

(С тех пор я изменил часть на UUID, чтобы посмотреть, поможет ли это с проблемой). Резервная копия копирует файлы на диск каждое утро без проблем. Только что я попытался скопировать один из файлов в другую папку и получил ошибку:

cp: reading `ts01-even.tgz': Input/output error

Я обнаружил, что проблема возникла из-за того, что / dev / sdb был изменен на / dev / sdc. Если я смонтирую / dev / sdc и снова попытаюсь скопировать файл, диск изменится на / dev / sdb. После изменения файловой системы fstab с / dev / sdX1 на UUID разницы в поведении не было. Кроме того, раньше я мог перечислять содержимое файла tarball, но попытка сделать это теперь приводит к вышеуказанному поведению. Любые идеи?

ОБНОВИТЬ:

запуск сценария резервного копирования и сохранение резервной копии на USB-накопителе не вызывает проблем, но перечисление файлов в tarball вызывает. Вот вывод системного журнала во время выполнения команды tar-архивов tar -ztf FILENAME:

Jul  3 15:09:14 ts01 kernel: [308398.446893] Buffer I/O error on device sdc1, logical block 786433
Jul  3 15:09:28 ts01 ntfs-3g[7468]: ntfs_attr_pread_i: ntfs_pread failed: Input/output error
Jul  3 15:09:28 ts01 ntfs-3g[7468]: Failed to read of MFT, mft=5 count=1 br=-1: Input/output error
Jul  3 15:09:28 ts01 kernel: [308412.404579] Buffer I/O error on device sdc1, logical block 786433
Jul  3 15:09:29 ts01 ntfs-3g[7468]: Unmounting /dev/sdc1 (FreeAgent Drive)
Jul  3 15:09:32 ts01 ntfs-3g[29176]: Version 2009.2.1 external FUSE 27
Jul  3 15:09:32 ts01 ntfs-3g[29176]: Mounted /dev/sdb1 (Read-Write, label "FreeAgent Drive", NTFS 3.1)
Jul  3 15:09:32 ts01 ntfs-3g[29176]: Cmdline options: rw,sync
Jul  3 15:09:32 ts01 ntfs-3g[29176]: Mount options: rw,sync,silent,allow_other,nonempty,relatime,fsname=/dev/sdb1,blkdev,blksize=4096
Jul  3 15:10:01 ts01 /USR/SBIN/CRON[29630]: (root) CMD ([ -x /usr/sbin/update-motd ] && /usr/sbin/update-motd 2>/dev/null)
Jul  3 15:11:35 ts01 kernel: [308539.310031] usb 1-1: reset high speed USB device using ehci_hcd and address 38
... (log repeated with a different address)
Jul  3 15:12:47 ts01 kernel: [308611.790038] usb 1-1: reset high speed USB device using ehci_hcd and address 38
Jul  3 15:12:49 ts01 kernel: [308613.148837] end_request: I/O error, dev sdb, sector 84779391
Jul  3 15:12:49 ts01 kernel: [308613.148871] Buffer I/O error on device sdb1, logical block 10597416
... (log repeated with a different address, with the logical block incrementing by 1 each time)
Jul  3 15:12:49 ts01 kernel: [308613.149090] Buffer I/O error on device sdb1, logical block 10597425
Jul  3 15:12:49 ts01 ntfs-3g[29176]: ntfs_attr_pread_i: ntfs_pread failed: Input/output error
Jul  3 15:12:49 ts01 ntfs-3g[29176]: ntfs_attr_pread error reading '/TS01_Backup/ts01-even.tgz' at offset 177012736: 131072 <> -1: Input/output error
Jul  3 15:12:49 ts01 ntfs-3g[29176]: ntfs_attr_pread_i: ntfs_pread failed: Input/output error
Jul  3 15:12:49 ts01 ntfs-3g[29176]: ntfs_attr_pread error reading '/TS01_Backup/ts01-even.tgz' at offset 177012736: 4096 <> -1: Input/output error

Я нашел кое-что, что показалось мне подходящим, но следование инструкциям не принесло результатов: FreeAgent диски

Вы хотите исследовать udev. Он отвечает за присвоение имени узлу устройства в / dev, и вы можете настроить правила, чтобы дать вашему USB-ключу уникальное имя.

Есть много вещей, которые кажутся неправильными в вашей конфигурации.

  1. Вставлять флешки в fstab смысла нет. Fstab - это в основном статический список системных запоминающих устройств и их точек монтирования. Вы назначаете статическую идентификацию диска / раздела (на основе адреса контроллера / устройства) статической точке монтирования. Ни один из них не является статичным для USB-накопителей. В вашем первом примере у вас возникнут проблемы, если вы установите второй жесткий диск в систему: он станет / dev / sdb, переместив ваш текущий USB-накопитель в / dev / sdc, что нарушит вашу конфигурацию во время загрузки.

  2. Кроме того, наличие вашего диска в fstab и с опцией «auto» сообщает системе, что диск должен быть подключен во время загрузки. Если по какой-либо причине диск будет отключен во время загрузки, ваш сервер выйдет из строя во время процедуры загрузки, что является действительно нежелательной ситуацией. Если привод не важен для работы системы, он, по крайней мере, не должен иметь опцию «авто».

  3. Параметр «nouser» не нужен, он установлен по умолчанию. Вариант «синхронизировать» - действительно плохая идея, если вы действительно не знаете, что делаете. Это не только сильно влияет на производительность, но и вызывает дополнительный износ накопителя, особенно флэш-накопителя.

  4. fs_passno = 3 (шестой столбец fstab) вызывает неопределенное поведение. Допустимые значения: только 0, 1 или 2.

  5. Использование NTFS с накопителем, предназначенным для резервного копирования сервера Linux. Зачем ты это делаешь? Все реализации Linux NTFS не оптимальны и не подходят для работы какой-либо подсистемы Linux. Вы должны использовать собственную файловую систему Linux, например Ext3.

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

  1. У вас неправильно разбитый на разделы диск, т.е. файловая система была отформатирована с неправильными параметрами, размер которой превышает размер фактического раздела; или раздел в таблице разделов (логический размер) больше физического размера диска. Это из-за "ошибок ввода-вывода буфера", которые вы видите. Вам следует подумать о том, чтобы полностью сбросить этот диск, включая таблицу разделов, а также переразметить и переформатировать его с нуля.

  2. На вашем диске поврежден сектор («end_request: ошибки ввода-вывода»). Вам следует подумать о беге badblocks по диску, чтобы проверить.

  3. Ваш USB-корпус не работает должным образом (из-за «сброса USB»). Если это внешний жесткий диск, он должен использовать независимый источник питания. 5 В 500 мА, которые (иногда) доступны через порт USB, недостаточны для поддержания работы жесткого диска. Еще может быть перегрев, особенно дешевые флешки.

  4. Файловая система NTFS повреждена. Исправить это можно с помощью ntfsfix, но вы должны снова помнить, что NTFS не является собственной файловой системой Linux. Для достижения наилучших результатов вам понадобится система Windows для правильной проверки этого раздела (с помощью Scandisk).

Другие предложения включают: прекратить использование NTFS и выбрать собственную файловую систему Linux, удалить эту запись из fstab, вручную смонтировать диск как часть сценария резервного копирования, размонтировать его после завершения и использовать UUID или метки файловой системы для обращения к диску.

Я видел, как дешевые USB-устройства совершают разные глупости во время массового копирования.

(Там, где я работаю, у нас есть оценочная USB-версия нашего программного обеспечения, и я заказал для них флешку на 4 Гбайт.) За последний год я, наверное, имел дело с десятками флешек.

Я почти уверен, что видел, как конечный автомат на USB-накопителе заклинивает при интенсивном использовании в дешевых моделях. Опять же Ubuntu, но 8.04LTS.

Опять же, повторяя предыдущий постер, попробуйте другой порт; Я обнаружил, что порт USB на док-станции с питанием от ноутбука, который я использовал, помог.

Общий совет - придерживаться именных дисков.

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

К какому USB-порту он подключен? Если у вас есть USB-концентратор с внешним питанием, используйте его.

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

Если вы не хотите использовать UUID или метку диска, всегда есть /dev/disk/by-фу/* имена устройств. Там вы также можете выбрать диск по make-model-serial или по порту ввода-вывода.

Вы можете присвоить тому метку, а затем смонтировать по метке, например

mount -L /myusbstick /mnt/myusbstick

Затем его можно подключить к любому порту или устройству с любым именем, и оно будет найдено. Вы также можете использовать uuids, но они не так удобны.

Вы можете запустить сканирование поверхности вашего USB-устройства и найти битые сектора. Сообщение об ошибке ввода / вывода в системном журнале могло означать наличие сбойных секторов. Я использовал seatools от Seagate для фиксированного сканирования поверхности дисков IDE / SATA. Посмотрите, может ли он распознать ваш USB-накопитель или нет.