Если я понимаю ваш вопрос, вы хотите знать, какое устройство использовалось для данного крепления. Для этого вы можете использовать df
команду:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/fedora_greeneggs-root 50G 21G 27G 44% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 14M 3.8G 1% /dev/shm
tmpfs 3.8G 984K 3.8G 1% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
tmpfs 3.8G 3.4M 3.8G 1% /tmp
/dev/sda1 477M 99M 349M 23% /boot
/dev/mapper/fedora_greeneggs-home 402G 184G 198G 49% /home
Чтобы определить, на каком устройстве находится конкретный файл / каталог, укажите в качестве аргумента файл df
. Используя ваш пример:
$ df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 477M 99M 349M 23% /
Вы также можете использовать mount
команду:
$ mount | grep '^/dev'
/dev/mapper/fedora_greeneggs-root on / type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mapper/fedora_greeneggs-home on /home type ext4 (rw,relatime,seclabel,data=ordered)
Каталог, смонтированный для каждого устройства, является третьим аргументом в выводе выше. Так что для устройства /dev/sda1
было бы /boot
. Другие устройства используют LVM (управление логическими томами), и их необходимо будет запросить, чтобы узнать, какое фактическое устройство используется LVM.
$PWD
(это то, что я монтирую) похоронено в серии символических ссылок, привязных монтирований и т. Д., То мне нужно будет рекурсивно исследовать путь для точек монтирования./proc/mounts
«вещи», которая монтируется, по крайней мере, на мой взгляд, не устройство, это каталог / файл.readlink -f /mnt
показывает?readlink -f /mnt
дает/mnt
В Linux мы
findmnt
сutil-linux
точно сделали для этогоПреимущество других решений заключается в том, что оно по-прежнему работает, если пути скрыты символическими ссылками или монтированными привязками.
источник
Самый точный из известных мне методов заключается в использовании вывода системного вызова lstat (). В частности, поле st_dev. Существует утилита командной строки stat (1), которую можно использовать для просмотра этой информации. Например, вывод «stat / etc / issue» на моем ноутбуке:
Обратите внимание на третью строку, первое поле «Устройство». Здесь перечислены 801h. Это значение может быть разделено на два байта, 8 и 1. Первый байт известен как старший номер, второй байт - младший номер. Итак, следующий шаг - выяснить, какое устройство старшее 8, младшее 1.
Я считаю консалтинг / proc / partitions самым быстрым. В моем случае / proc / partitions содержит содержимое:
Из этого вывода довольно ясно, что старший 8, младший 1 - это sda1. Мы можем подтвердить это с помощью ls -l / dev / sda1
Обратите внимание на 8, 1 перед отметкой даты.
Важно понимать / помнить, что имя файла устройства, например / dev / sda1, является только меткой. Старшие и младшие числа являются значимыми, важными значениями файла устройства. Если вам интересно, посмотрите утилиту mknod (1), используемую для создания файлов устройств. Я мог бы создать новую запись / dev под названием aardvark с основным 8, второстепенным 18 со следующим синтаксисом:
Тогда я мог бы легко смонтировать его:
и если мы посмотрим на вывод команды mount или содержимое / proc / mounts и увидим:
df -h показывает:
... В любом случае, смысл всего этого состоит в том, чтобы проиллюстрировать, что важными деталями для идентификации блочного устройства являются старшие и младшие номера, а не метка файла устройства, и что использование системного вызова lstat () - лучший способ запросить эти значения.
В качестве последнего комментария я просто перечитал ваш вопрос, чтобы убедиться, что отвечаю на него, и понял, что вы спрашиваете, какая метка исходного устройства будет отображаться в / proc / mounts для монтирования с привязкой. Это будет та же самая метка исходного устройства, которая использовалась в исходном вызове mount (2) для источника точки монтирования файловой системы для монтирования связывания. Возможно, пример поможет:
У меня есть / dev / sdb2 и / dev / aardvark (так же, как указано выше). Они оба - основные 8, второстепенные 18. Обратите внимание, я буду монтировать одну и ту же файловую систему дважды. Я делаю следующее:
Обратите внимание, что я делаю каталог somedir в / mnt1. Но поскольку / mnt1 и / mnt2 имеют одинаковую монтированную файловую систему, somedir также будет доступен через / mnt2.
Теперь, если мы проверим / proc / mounts, мы увидим:
Метка исходного устройства на / foo / ... bind mounts совпадает со значением, изначально указанным в вызове файловой системы mount (2). Помните, что / dev / aardvark и / dev / sdb2 в моем примере - это одно и то же устройство.
Я понимаю, что только что напечатал роман, и первая половина на самом деле не отвечает на ваш вопрос, но казалось, что это пустая трата, чтобы удалить его. Возможно, это поможет кому-то еще.
Удачи.
PS Имейте в виду, что некоторые файловые системы основаны на сети - например, NFS или CIFS - или являются виртуальными - как procfs или sysfs и не имеют блочного устройства-источника. Я не знаю, что будет возвращено как устройство в выводе статистики, просто за то, что оно того стоит.
источник
Учитывая следующие типичные точки монтирования:
stat --format %m <path>
будет печатать только точку монтирования с возможностью обхода (хотя вам нужно проверить код выхода, чтобы однозначно обнаружить ошибку разрешения; подходы монтирования здесь выигрывают):Симлинки позаботятся как обычно:
И, конечно же, не забывайте использовать кавычки при написании сценариев. Рассмотрим путь точки монтирования с пробелами и такие:
Насколько велико это вы?
Завершение вкладки моего дистрибутива даже не дает правильного решения, поэтому мы просто подстановочные знаки этого примера точки монтирования с возвратами каретки и переводами строк и пробелов:
источник