Visning af fysiske blokkenheder

В дополнение к узлам устройств, объясненных в других ответах (созданных с помощью mknod (2) или предоставленных некоторыми devfs ), в Linux есть другие «волшебные» файлы, предоставляемые специальными виртуальными файловыми системами , в частности, в / proc / (см. proc (5) , прочтите о procfs ) и в / sys / (прочтите о sysfs ).

Эти псевдофайлы (которые появляются, например, в stat (2) - как обычные файлы, а не как устройства) представляют собой виртуальное представление, предоставляемое ядром; в частности, чтение из / proc / (например, с помощью cat / proc / $$ / maps или open (2) -ing / proc / self / status в вашей программе) обычно не требует физического ввода-вывода с диска или сети, поэтому выполняется довольно быстро.

Чтобы создать дополнительный псевдофайл в / proc / , вы обычно должны написать свой собственный модуль ядра и загрузить его (см., Например, this ).

1
13.04.2018, 19:01
3 ответа

Получить информацию (без разделов):

$ lsblk -a -d
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0   20G  0 disk
sdb    8:16   0   40G  0 disk
sr0   11:0    1 55.3M  0 rom

-a       print even empty devices (if disk is not loaded in CD/DVD device)
-d       discard print slaves
1
27.01.2020, 23:23

Предполагая, что вы действительно хотите видеть физические устройства, а не только все блочные устройства:

Тогда моя рекомендация будет:

lsblk -a -d -e 230

Почему?

Давайте посмотрим, что делают эти параметры командной строки, на справочной странице:

       -a, --all
              Also list empty devices.  (By default they are skipped.)

Как ни странно, lsblkпоказывает DVD-рекордер моего ноутбука, даже когда он пуст, без -a. Но, кажется, ничего не повредит, чтобы оставить его в наличии.

       -d, --nodeps
              Do not print holder  devices  or  slaves.   For  example,  lsblk
              --nodeps /dev/sda prints information about the sda device only.

Это означает, что мы не видим разделов на устройстве, а только само устройство.

       -e, --exclude list
              Exclude  the  devices  specified  by the comma-separated list of
              major  device  numbers.   Note  that  RAM  disks  (major=1)  are
              excluded  by  default.   The  filter is applied to the top-level
              devices only.

Наконец, я использую -e 230, чтобы исключить zvols ZFS, которые используют этот старший номер. Это полностью логические блочные устройства, но драйвер ZFS заставляет их отображаться в lsblkтак же, как физические дисковые устройства. Если вы используете ZFS, вы можете исключить zvols из отображения с помощью -e 230.

[root@dalaran ~]# lsblk -a -d -e 230
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda       8:0    0 894.3G  0 disk 
sr0      11:0    1  1024M  0 rom  
nvme0n1 259:0    0   477G  0 disk 

Я не рекомендую использовать параметр -S, так как это приведет к тому, что устройства NVMe не будут отображаться.


На справочной странице lsblkесть несколько других опций, которые позволяют сделать вывод более машиночитаемым, если вы хотите написать сценарий оболочки. Например, -nи -oили -P.

2
27.01.2020, 23:23
ls -l /sys/block/ | awk '$11 != "" && $11 !~ "^../devices/virtual" { print $9; }
0
27.01.2020, 23:23

Теги

Похожие вопросы