LINUX.ORG.RU

Как временно защитить выдачу имени блочного устройства при отключении диска

 , ,


0

1

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

Например, подключая диск /dev/sdb по usb, я хочу, чтобы этот /dev/sdb был занят от выдачи другим устройствам ни при каких обстоятельствах, для уверенности.

Получить RW файловый дескриптор на это устройство? fopen?

★★★★★

как удостовериться что между этапами это устройство не удалили и не вставили другое

Поставить проверку в скрипт

is_device="$(lsusb | grep 058f)" # Проверка на наличие uuid (в unix вместо lsusb грепать нужно blkid)
	
if [ "$is_device" != "" ]; then {
#echo "[ ok ] устройство есть"		
}

и тд..
Clockwork ★★★★★
()
Последнее исправление: Clockwork (всего исправлений: 1)
Ответ на: комментарий от Clockwork

Да это понятно, проверять каждый раз при запуске sgfdisk, wipefs, mkfs, так и сделаю, но все же может есть вариант и с дополнительной защитой.

bhfq ★★★★★
() автор топика

GPT разделу можно назначить (рандомный) PARTUUID, потом брать этот раздел /dev/disk/by-partuuid/

anonymous
()

удостовериться что между этапами это устройство не удалили и не вставили другое

А что мешает извлечь и вставить другое устройство не между этапами, а прямо в процессе?

slowpony ★★★★★
()
Ответ на: комментарий от slowpony

идея использовать udisks, через execsnoop-bpfcc и чтения strace логов понял, что он запускает udevadm settle https://stackoverflow.com/questions/14127210/what-is-the-use-of-udevadm-settle перед sgfdisk, но не перед wipefs, mkfs.

если прямо в момент одного из процессов, то эти консольные утилиты завершаются с ошибкой, о чем udisks говорит в сообщении с ошибкой.

у его dbus api есть сигналы InterfaceAdded/Removed но с такими лютыми задержками между реальным удалением устройства и сигналом.

bhfq ★★★★★
() автор топика
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от TheAnonymous

если заменить устройство на его копию разве там не будут те же пути? одинаковые модели например? идея с GPT PARTUUID от анонима выглядит интересной. Возможно я нашел решение проблемы http://storaged.org/doc/udisks2-api/latest/gdbus-org.freedesktop.UDisks2.Block.html#gdbus-property-org-freedesktop-UDisks2-Block.Id

bhfq ★★★★★
() автор топика
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от bhfq

by-id включает серийный номер, у дисков одинаковых моделей например он отличается. Хотя возможно, какие-нибудь китайские флешки будут с одним номером на всех, или на каких-то моделях серийник можно подменить (аппаратно, прошить на программаторе, ещё как-то).
Чтобы точно не подменили, как вариант можно сделать правило udev, чтобы при каждой вставке/извлечении дисковых устройств било тревогу и скрипт заканчивался

TheAnonymous ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.