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


110

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

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


Ответы:


148

Команда 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устройствах.

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


4
+1. Интересно. Я не знал, dfбыло так любезно.
Фахим Митха

Хорошо, я сделал это и получил / dev / mapper / fun-root в качестве моей файловой системы. Что теперь? (Мой компьютер зовут 'веселье')
ripper234

1
Тогда, возможно, вы используете LVM? lvdisplayили lvsбудет твоим другом.
phunehehe

5
Я был настолько впечатлен этим ответом, что использовал его в качестве основы для команды «rawdev», которая возвращает базовое устройство (а) пути или раздела, даже в случаях, когда LVM и / или MD вложены. Это доступно на Github: github.com/BMDan/rawdev .
BMDan

5

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

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

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


Работает большую часть времени, однако, если <pathname> находится в снимке btrfs, это сообщает '-'.
Эллиптический вид

1

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

@DanDascalescu справедливая точка. Это может быть полезно, когда / если вы хотите узнать фактическое аппаратное устройство, которое я искал, когда задавал этот вопрос.
Ариэльф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.