Получить имя устройства и точку подключения, если известна метка раздела

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

Существует несколько возможностей:

Linux

Метка файловой системы для имени устройства

Имя устройства можно получить с помощью blkid :

 blkid -l -o device -t LABEL="$label" -c /dev/null 

Имя устройства для точки подключения

Я попытался получить точку монтирования с blkid , но я потерпел неудачу. С помощью ключа -s все остальные поля могут быть запрошены, если указана метка:

 blkid -l -t LABEL="$label" -o value -s LABEL # yields label blkid -l -t LABEL="$label" -o value -s TYPE # yields partition type blkid -l -t LABEL="$label" -o value -s UUID # yields UUID blkid -l -t LABEL="$label" -o value -s MOUNTPOINT # yields nothing 

По-видимому, получение точки монтирования не поддерживается, хотя оно указано, когда задан параметр -o list , но не в простом анализе:

 blkid -o list -c /dev/null <device> 

Следующая попытка состояла в том, чтобы использовать df -P . Вот что я придумал, предполагая, что устройство хранится в переменном device :

 export device mountpoint=$(df -P | awk --assign dev="$device" \ '{if ($1==dev) \ {for (i=1; i<=NF-5; i++) \ $i=$(i+5); \ NF-=5; \ print \ } \ }') 

Этот код работает. Однако, учитывая его уродство, я не убежден, что разбор df является предпочтительным способом.

Другие устройства

Метка файловой системы для имени устройства

blkid прекрасно работает на Linux, но он недоступен в Solaris или FreeBSD (по крайней мере, нельзя ожидать, что он будет установлен). То же самое касается findfs .

Как получить имя устройства переносимым образом в Linux, Solaris и FreeBSD?

Имя устройства для точки подключения

К счастью, df -P производит очень похожий вывод на всех тестируемых системах. Проблема в том, что мой уродливый скрипт awk не выглядит портативным (тестируется с помощью Sun awk , gawk на Solaris и FreeBSDs awk ). Каков предпочтительный способ?

Связанные вопросы

Как получить точку монтирования флеш-накопителя с помощью uuid? Проблема: Parsing /proc/mounts не переносится и не работает даже в Linux. Синтаксический анализ кажется еще хуже. Perl, как правило, недоступен.

Есть ли команда, чтобы увидеть, где установлен диск? Проблема: Parses /proc/mounts с багги-скриптом awk . Решения не переносимы.

Резюме

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

  Label-To-Device Device-To-Mount-Point --------------- --------------------- Linux ✓ ✓ (ugly) Solaris . . FreeBSD . . 

  • Solaris - Наследование файлами права собственности пользователя на каталог
  • Трубы Bash vs ksh
  • При настройке SFTP между * nix-серверами, является ли это обычное рукопожатие необязательным?
  • Solaris 11 (GNOME) - Где находится «главное» меню?
  • Это хорошая идея использовать «безопасный» режим входа zlogin для выключения зоны?
  • Как я могу просмотреть содержимое файла tar.gz (filenames + filesize)
  • Как завершить графический интерфейс в SunOS из shell-script
  • В чем опасность установки максимального предела максимальным дескрипторам файлов для каждого процесса?
  • One Solution collect form web for “Получить имя устройства и точку подключения, если известна метка раздела”

    Вы можете выполнить следующие действия:

    1. get devname использует blkid_dev_devname(...)
    2. получить prob для этого раздела, используя blkid_new_probe_from_filename(...)
    3. используйте setmntent(...) , getmntent(...) и endmntent(...) , где mnt->mnt_fsname равно devname copy mnt->mnt_dir который является точкой монтирования!

    Подробнее см. В этих ссылках

    структура данных

     struct mntent { char *mnt_fsname; /* name of mounted file system */ char *mnt_dir; /* file system path prefix */ ... }; 
    Interesting Posts

    Почему ssh не возвращает название терминала?

    sfdisk не любит разделы – хочу сбросить еще один жесткий диск для восстановления программного RAID

    Отключить блокировку прокрутки

    Звуковой сигнал Ubuntu 10.0 автоматически отключается на ThinkPad

    Использование криптографических функций ядра

    Как определить, будет ли специальный файл символа блокироваться, если он читается из

    Очередь дисциплины для каждого интерфейса, что происходит с интерфейсами с использованием того же устройства?

    Centos 5.01 не может подключиться к Интернету

    Использовать результат поиска без ./

    Как исправить мою установку PHP на FreeBSD, используя pkg

    rm -rf не работает с цифрами, используя linux?

    Печатать строки, в которых первое поле имеет только четыре символа, используя регулярное выражение в awk?

    Как извлечь конкретное поле из строк из файла на основе соответствия последующих строк

    Как удалить все уведомления на рабочем столе навсегда в SUSE KDE

    Сообщение "не согласен с версией"

    Linux и Unix - лучшая ОС в мире.