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

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

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

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 есть эквивалент /etc/ld.so.conf?
  • Присвоение переменной «awk» или «nawk» переменной в скрипте оболочки
  • Как выполнять команды в пакетном режиме по ssh?
  • Как правильно использовать / usr / xpg4 / bin / grep -F
  • временный файл репликации zfs
  • не может сделать protobuf на Solaris 8
  • Есть ли в Solaris система yum или apt-get like?
  • Solaris 11 (GNOME) - Где находится «главное» меню?
  • 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 */ ... }; 
    Linux и Unix - лучшая ОС в мире.