Ответы:
Команда 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