Вопрос или проблема
Я использую Ubuntu 24.04. Для резервного копирования у меня есть NVMe SSD в внешнем USB-корпусе с разделом EXT4, зашифрованным с помощью LUKS. Как отключить кеширование записи, чтобы избежать сбоев при сбоях питания или случайных отключениях?
fdisks показывает:
$ sudo fdisk -l
Disk /dev/sda: 1,86 TiB, 2048408248320 байт, 4000797360 секторов
Disk model: D NM790 2TB
Единицы: секторы по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер ввода-вывода (минимальный/оптимальный): 4096 байт / 4096 байт
Disk /dev/mapper/lexar_nm790_2tb: 1,86 TiB, 2048391471104 байт, 500095574 сектора
Единицы: секторы по 1 * 4096 = 4096 байт
Размер сектора (логический/физический): 4096 байт / 4096 байт
Размер ввода-вывода (минимальный/оптимальный): 4096 байт / 4096 байт
Не удалось заставить работать hdparm:
$ sudo hdparm -W 0 /dev/sda
/dev/sda:
установка кеширования записи на диске в 0 (выключено)
SG_IO: плохие/отсутствующие данные сенса, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SG_IO: плохие/отсутствующие данные сенса, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SG_IO: плохие/отсутствующие данные сенса, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
$ sg_decode_sense 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Формат фиксированный, текущий; Ключ сенса: Неправильный запрос
Дополнительный смысл: Недопустимый код операции команды
Я также не смог получить/установить функции nvme (он, похоже, не распознается как NVMe-диск):
$ sudo nvme get-feature -f 6 /dev/mapper/lexar_nm790_2tb
get-feature: Неподходящий ioctl для устройства
Как я могу постоянно отключать кеширование записи для диска или раздела внешнего USB-корпуса?
Ответ или решение
Отключение кэша записи на внешнем NVMe SSD под управлением Ubuntu 24.04 может быть вызовом, особенно если диск подключен через USB и использует шифрование LUKS. Далее мы рассмотрим пошаговое руководство, как решить эту задачу, учитывая ваш сценарий использования.
Теория
Кэш записи — это технология, используемая в накопителях для временного хранения данных перед их записью на диск. Эта функция улучшает производительность системы, но может представлять собой риск в случае потери питания или случайного отсоединения устройства. В частности, временные данные, находящиеся в кэше, могут быть утеряны, что может привести к повреждению данных. По этой причине в некоторых ситуациях, например при использовании внешнего накопителя для резервного копирования, может быть полезно отключить кэш записи.
В вашем случае, поскольку диск подключен через USB, многие стандартные утилиты, такие как hdparm
и nvme-cli
, могут не работать, так как они рассчитаны на прямую работу с устройствами SATA и NVMe, в то время как USB-адаптеры часто абстрагируют физическое устройство.
Пример
Вы уже пытались использовать hdparm
, но получили ошибку. Также попытка применения nvme-cli
для устройства, которое распознается как устройство LUKS, тоже не привела к успеху. Это связано с тем, что USB-контроллер, скорее всего, не передает команды, специфичные для NVMe, к полноценному устройству.
Применение
Чтобы отключить кэширование записи на вашем внешнем USB SSD с зашифрованным разделом EXT4, следуйте следующим шагам:
-
Проверьте поддержку отключения кэша в USB-контроллере. Некоторые USB-дисковые доки поддерживают управление кэшем напрямую. Проверьте документацию вашего USB-контроллера или производителя устройства, чтобы узнать, доступна ли такая опция.
-
Используйте правила udev для управления кэшированием: В некоторых случаях можно управлять кэшированием на уровне udev. Создайте новое правило udev, отредактировав или создав файл в
/etc/udev/rules.d/
:sudo nano /etc/udev/rules.d/99-usb-ssd-rules.rules
Добавьте строку, которая совпадает с вашим устройством:
ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="sda", ATTR{queue/write_cache}="write through"
Замените
sda
на/dev/sda
, если ваш диск в другой нумерации в системе. -
Проверьте файловую систему EXT4: Хотя это не отключит кэширование на уровне контроллера диска, можно минимизировать задержки записи данных, используя следующие монтировочные опции:
sudo nano /etc/fstab
Измените строку монтирования вашего раздела EXT4:
/dev/mapper/lexar_nm790_2tb /mnt/backup ext4 defaults,data=ordered,noatime 0 2
Опция
data=ordered
гарантирует, что данные будут записываться на диск в правильном порядке, снижая риск повреждений при весенних пролётах. -
USB-энергосбережение: Не используйте энергосберегающие функции для этого устройства, так как это может увеличить возможность его отключения. Проверьте и отключите параметры энергосбережения через
udiskctl
илиudisks
utilities:sudo udisksctl power-off -b /dev/sda
Отключение энергосбережения гарантирует, что диск всегда будет в рабочем состоянии во время использования.
-
Обратитесь к производителю USB-кадра: Если решение невозможно штатными средствами, проверьте наличие обновлений прошивки или обратитесь к специалистам поддержки оборудования для уточнения информации.
Следуя перечисленным шагам, вы сможете более надежно защитить данные на вашем внешнем SSD от потерь из-за отключения питания или случайного отсоединения. Всегда делайте резервные копии критически важных данных и учитывайте риски при использовании кэширования записи.