it-swarm-ru.tech

Как узнать, на каком физическом устройстве находится папка?

В частности: я сделал Sudo mkdir /work, и хотел бы убедиться, что он действительно находится на моем жестком диске и не сопоставлен с каким-либо другим диском.

Как проверить, где эта папка физически расположена?

120
ripper234

Команда 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_.

Есть и другие методы, которые могут быть вложены в блочные устройства (Fuse, loopback filesystems), которые будут иметь свои собственные методы для определения базового блочного устройства, и вы даже можете вкладывать несколько слоев, чтобы вам пришлось идти вниз. Вам придется принимать каждый случай так, как он есть.

154
camh

Для сценария вы можете использовать:

$ df -P <pathname> | awk 'END{print $1}'

Это POSIX-совместимый.

5
Tom Hale

В современных дистрибутивах 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.

2
arielf