Ответы:
Команда df(1)сообщит вам устройство, на котором находится файл или каталог:
df /work
В первом поле находится устройство, на котором находится файл или каталог.
например
$ df /root
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 1043289 194300 795977 20% /
Если устройство является логическим томом, вам необходимо определить, на каких блочных устройствах включен логический том. Для этого вы можете использовать lvs(8)команду:
# df /usr
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/orthanc-usr
8256952 4578000 3259524 59% /usr
# lvs -o +devices /dev/mapper/orthanc-usr
LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices
usr orthanc -wi-ao 8.00g /dev/sda3(0)
В последнем столбце указывается, что логический том usrв группе томов orthanc( /dev/mapper/orthanc-usr) находится на устройстве /dev/sda3. Поскольку группа томов может охватывать несколько физических томов, вы можете обнаружить, что у вас есть несколько устройств в списке.
Другим типом логического блочного устройства является устройство md (несколько устройств, которое, я думаю, раньше называлось мета-диском), например /dev/md2. Чтобы посмотреть на компоненты устройства MD, вы можете использовать mdadm --detailили посмотреть в/proc/mdstat
# df /srv
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md2 956626436 199340344 757286092 21% /srv
# mdadm --detail /dev/md2
...details elided...
Number Major Minor RaidDevice State
0 8 3 0 active sync /dev/sda3
1 8 19 1 active sync /dev/sdb3
Вы можете видеть , что /dev/md2находится на /dev/sda3и /dev/sdb3устройствах.
Существуют и другие методы, которые могут быть вложены в блочные устройства (плавкие предохранители, петлевые файловые системы), которые будут иметь свои собственные методы для определения базового блочного устройства, и вы даже можете вкладывать несколько слоев, чтобы вам пришлось идти вниз. Вам придется принимать каждый случай так, как он есть.
dfбыло так любезно.
lvdisplayили lvsбудет твоим другом.
Для сценария вы можете использовать:
$ df -P <pathname> | awk 'END{print $1}'
Это POSIX-совместимый.
В современных дистрибутивах Ubuntu есть дополнительный слой (устройство отображения) между вашим файлом / каталогом и устройством. /dev/mapperсодержит символические ссылки, указывающие на фактические специальные устройства. Например, примеряя текущий каталог:
$ df . | grep '^/' | cut -d' ' -f1
/dev/mapper/kubuntu--vg-root
$ ls -l /dev/mapper/kubuntu--vg-root
lrwxrwxrwx 1 root root 7 Nov 22 18:02 /dev/mapper/kubuntu--vg-root -> ../dm-1
Таким образом, чтобы получить полный путь к устройству программно, вы можете использовать:
$ realpath $(df . | grep '^/' | cut -d' ' -f1)
Какой у меня кейс печатает:
/dev/dm-1
realpath является частью GNU coreutils.
dfбудет по-прежнему отображать mapperпуть.
findmnt -T /work