2014-10-23 2 views
0

У меня есть система (работает под CentOS 6.3), которая любит архивировать данные на флеш-накопители.Linux: Как определить, удален ли установленный том vfat?

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

Теперь я имею дело с тем, что я не хочу продолжать размонтировать и перезагружать том, поэтому я просто оставлю его установленным. Но тогда, когда пользователь делает это, я НЕ знаю, как сказать, что это ушло!

У меня есть петля, опросившая привод, и я смотрю на вещи вроде statvfs64() (который продолжает действовать так, как если бы диск был там). stat() также не изменяется, когда привод физически удален.

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

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

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

Пока что я выяснил, что я могу проверить устройство монтирования и посмотреть, существует ли он (когда я вытаскиваю флеш-ключ, запись/dev/sd * исчезает). Мне кажется, что есть лучший способ сделать это, но я еще не смог понять это.

ответ

0

Даже если/dev/sd * существует, это не означает, что привод установлен только в системе. Может быть, вы можете попробовать выполнить парсинг/proc/mounts файл и посмотреть, найдете ли вы его там.

+0

Он остается в/proc/монтируется до тех пор, пока привод не будет размонтирован. –

+0

Он присутствует в/proc/mount даже после того, как диск физически удален? – Alex

+0

Да, в этом проблема. Не только это, но такие вещи, как «stat» в точке монтирования, возвращаются так же, как если бы диск был там, и даже «ls/mnt/mountpoint» просто возвращает пустой каталог, а не какой-то сбой. Я не знаю, происходит ли это со всеми файловыми системами, но это происходит с fat32, и я должен поддерживать fat32, поэтому я не смотрел дальше. –

0

ОК, что я сделал, это периодически проверять, что устройство все еще существует. Поэтому, если у меня есть/dev/sdb1, установленный в/mnt/usbdrive, я периодически проверяю, что/dev/sdb1 все еще существует. Если это не так, я отключусь и вернусь к просмотру.

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

Смежные вопросы