Как легко узнать, смонтировано ли как-то блочное устройство (или его часть)

10

Я хочу знать, как проще всего определить (без привилегий root), sdbсмонтировано ли (скажем ) блочное устройство или какая-либо его часть (и какая его часть).

Проверка на /proc/mountsналичие sdb недостаточна, поскольку sdbLVM может использовать один из его разделов. Вы можете проверить, /sys/block/sdb/sdb*/holders/но вы получите dm-xзаписи, которые должны быть преобразованы в /dev/mapperимена, чтобы проверить /proc/mounts. Возможно, но если есть более простое решение ... (которое не требует привилегий root)

Хауке Лагинг
источник
2
Мне любопытно, не пытались ли вы узнать, установлено ли устройство? * / holders и * / * / holders достаточно хороши, чтобы сообщить вам, что они смонтированы, если устройство не существует в таблице / proc / mounts. Почему вам нужно решить это, дальше? то есть cryptsetup добавляет его в держатели, указывая, что вы не должны связываться с диском ... даже если / dev / mapper не монтируется или вызывает повреждение шифрования. Просто его монтируют изнутри через водителя. Также не забудьте проверить / sys / block / sdb / holders, так как диск можно «держать» без разделов.
Рахли

Ответы:

12

По сути, это вопрос проверки целого пакета угловых чехлов.

  • Диск может появиться в / proc / mounts
  • Диск может быть использован в качестве подкачки (используйте / proc / swaps)
  • Диск может быть частью активного LVM PV (используйте pvdisplay)
  • Диск может быть частью RAID-группы dm-mapper (используйте / proc / mdstat)
  • Привод может напрямую обращаться к диску (например, Oracle поддерживает запись непосредственно на диск или раздел вместо файловой системы) (используйте fuser)
  • Доступ к диску возможен через виртуальную машину (используйте фьюзер)
  • Привод может ссылаться петлевым устройством (например: mount /dev/sda -o offset=1M /foo) (использование losetup -a)

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

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

# cat /proc/mounts
...
/dev/loop0 /foo ext4 relatime,data=ordered 0 0

# losetup -a
/dev/loop0 [0005]:2048 (/dev/sda), offset 1048576

Почему ты бы так поступил? Как правило, это связано с ситуациями, когда ранее все шло не так.

Также имейте в виду, что теперь, когда функция пространств имен находится в основной строке (см. Unshare ), разные процессы могут иметь разные представления о том, что подключено, а что нет. Здесь вещи начинают немного краснеть.

tylerl
источник
1

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

т.е. что использует lvm: pvdisplay

Так что вам нужно включить также nfs, cifs, raid, loop, crypt и так далее. Хорошая отправная точка всегда /proc/mounts, как вы уже упоминали.


источник