Введение в команду lsblk

Lsblk – очень хорошая утилита, установленная по умолчанию практически во всех дистрибутивах Linux: мы можем использовать ее для получения обширной информации обо всех блочных устройствах, подключенных к системе. В этой статье мы увидим, как это работает и как его использовать.

В этом руководстве вы узнаете :

  • Как использовать утилиту lsblk для получения информации о блочных устройствах.
  • Что означают столбцы, отображаемые в выводе утилиты по умолчанию
  • Как указать столбцы, которые будут отображаться, и форматировать вывод как json или как список
  • Как отображать информацию об определенном устройстве.

Используемые программные требования и соглашения

Требования к программному обеспечению и условные обозначения командной строки Linux
Категория Требования, условные обозначения или используемая версия программного обеспечения
Система Не зависит от распространения
Программное обеспечение lsblk
Другое Других требований не требуется
Конв. entions # – требует, чтобы данные команды linux выполнялись с привилегиями root либо непосредственно как пользователь root, либо с помощью команды sudo
$ – требует, чтобы указанные команды linux выполнялись от имени обычного непривилегированного пользователя

Базовое использование Lsblk

В самом базовом использовании, при вызове без какой-либо конкретной опции или аргумента, утилита lsblk выдаст древовидный вывод, включающий все блочные устройства, подключенные к операционной системе. Вот пример:

  NAME MAJ: MIN RM SIZE RO TYPE MOUNTPOINTsda 8: 0 0 232.9G 0 disk├─sda1 8: 1 0 1G 0 part/boot└─  sda2 8: 2 0 231.9G 0 часть └─luks-5794a0b4-7082-4769-b86b-bd27a544361a 253: 0 0 231.9G 0 crypt ├─fingolfin_vg-root_lv 253: 1 0 35G 0 lvm/├─fingolfin_vg-swap  2 0 6G 0 lvm [SWAP] ├─fingolfin_vg-home_lv 253: 3 0 15G 0 lvm/home └─fingolfin_vg-data_lv 253: 4 0 170G 0 lvm/mnt/datasr0 11: 0 1 1024M 0 romzram0 252: 0 0 2,8  Диск G 0 [SWAP]  

ПОДПИСАТЬСЯ НА НОВОСТИ И RSS
Подпишитесь на RSS и НОВОСТНОЙ БЮЛЛЕТЕНЬ и получайте последние новости Linux, вакансии, советы по карьере и учебные пособия.


Дерево -подобная структура очень полезна для идентификации устройств и их разделов, а также их структуры на устройстве. В выходных данных выше, например, мы видим, что на устройстве sda есть два раздела: sda1 и sda2 .

Как мы можем заметить, первый является «стандартным» разделом: мы можем идентифицировать его как таковой, потому что мы можем взглянуть на соответствующее значение в TYPE столбец, который в данном случае является частью . Мы также можем заметить, что раздел в настоящее время смонтирован в /boot .

Последний, sda2 , также является стандартным раздел, но, как легко понять из графика, у него есть «дочерние» или «подчиненные» устройства. Первый – это контейнер LUKS , идентифицированный luks-5794a0b4-7082-4769-b86b-bd27a544361a (это имя устройства сопоставления). Будучи системой, установленной на lvm при настройке luks, сам контейнер luks помечен как физический том и содержит несколько логических томов, смонтированных в различных частях системы.

В первом столбце файла На выходе мы можем увидеть информацию об устройстве NAME , которую довольно легко понять. Обратите внимание, что по умолчанию отображается только имя устройства, а не его полный путь: вместо этого мы должны использовать параметр -p .

Второй столбец называется MAJ: MIN : это числа, используемые ядром для внутренней идентификации устройств, первое число указывает тип устройства ( 8 , например, используется для дисков SCSI).

Третий столбец, отображаемый в выводе lsblk по умолчанию, – RM : посмотрев на этот столбец, мы можем увидеть если устройство съемное (значение будет 1 ) или нет. В выходных данных выше только одно устройство помечено как съемное, sr0 , это оптический привод.

Объем четвертого столбца легко определить по его имя: РАЗМЕР . В нем отображается размер соответствующих устройств.

Пятый столбец – RO : этот столбец используется, чтобы указать, доступно ли устройство только для чтения или нет. . Как и в столбце RM , значения в столбце используются как логические, поэтому 1 означает, что устройство доступно только для чтения.

Шестой столбец вывода – TYPE : как мы уже упоминали ранее, этот столбец используется для идентификации устройства или типа раздела. Например, наблюдая за выводом команды, мы видим, что значение crypt используется для идентификации контейнера luks, в то время как lvm используется для идентификации логического тома. устройства, а disk используется для необработанных блочных устройств, таких как sda .

Седьмой и последний столбец – MOUNTPOINT : этот столбец предоставляет информацию о текущей точке монтирования каждого раздела/блочного устройства.

Сбор информации об определенном устройстве

Как мы видели выше , если мы вызовем команду lsblk без каких-либо других аргументов или параметров, мы получим информацию о текущих устройствах, подключенных к системе. Что, если мы хотим получить информацию об определенном устройстве?

Все, что нам нужно сделать, это передать устройство, о котором мы хотим собрать информацию, в качестве аргумента команды lsblk. Например, если мы хотим проверить только устройство sda1 , мы должны запустить:

  $ lsblk/dev/sda1   

Обратите внимание на то, что мы предоставили полный путь к устройству, а не только его имя. Результат выполнения приведенной выше команды, как и следовало ожидать, будет следующим:

  NAME MAJ: MIN RM SIZE RO TYPE MOUNTPOINTsda1 8: 1 0 1G 0 part/boot  

Указание столбцов, которые будут отображаться в выводе lsblk

Мы уже видели, какие столбцы включаются по умолчанию в вывод lsblk при его вызове без какой-либо конкретной опции. Однако это лишь небольшая часть доступных. Чтобы указать информацию, которую мы хотим включить в вывод, мы должны использовать параметр -o (сокращение от - output ) и предоставить разделенные запятыми список столбцов, которые мы хотим включить. Например, чтобы вывод включал только информацию об именах устройств и типах файловых систем, мы могли бы выполнить:

  $ lsblk -o NAME, FSTYPE  


Приведенная выше команда вернет следующий результат :

  НАЗВАНИЕ FSTYPEsda├─sda1 ext2└─sda2 crypto_LUKS └─luks-5794a0b4-7082-4769-b86b-bd27a544361a LVM2_member ├─fingolfin_vg-root_lf─ ext4 ─fingolfin_vg-root_lf─  swap ├─fingolfin_vg-home_lv ext4 └─fingolfin_vg-data_lv ext4sr0zram0  

Чтобы получить полный список доступных столбцов и объяснение предоставляемой ими информации, мы можем вызвать утилиту lsblk с параметр - help :

  Доступные выходные столбцы: NAME имя устройства KNAME внутреннее имя устройства ядра PATH путь к узлу устройства MAJ: MIN  major: младший номер устройства Доступный размер файловой системы FSAVAIL Размер файловой системы FSSIZE Тип файловой системы FSTYPE Используемый размер файловой системы FSUSED FSUSE% процент использования файловой системы FSVE  R версия файловой системы MOUNTPOINT, где смонтировано устройство LABEL файловая система LABEL UUID файловая система UUID PTUUID идентификатор таблицы разделов (обычно UUID) PTTYPE тип таблицы разделов PARTTYPE код типа раздела или UUID PARTTYPENAME имя типа раздела PARTLABEL partition LABEL PARTUUID раздел UUID PARTFLAGS флаги раздела RA с опережающим чтением  устройства RO устройство только для чтения Съемное устройство RM Съемное устройство HOTPLUG или устройство с возможностью горячей замены (usb, pcmcia, ... ) МОДЕЛЬ идентификатор устройства ПОСЛЕДОВАТЕЛЬНЫЙ Серийный номер диска РАЗМЕР размер устройства СОСТОЯНИЕ состояние устройства ВЛАДЕЛЕЦ имя пользователя ГРУППА имя группы РЕЖИМ разрешения узла устройства ВЫРАВНИВАНИЕ смещение выравнивания MIN-IO минимальный размер I/O OPT-IO оптимальный размер I/O PHY-SEC  размер физического сектора LOG-SEC размер логического сектора ROTA устройство вращения SCHED Имя планировщика ввода/вывода RQ-SIZE размер очереди запросов TYPE тип устройства DISC-ALN смещение выравнивания сброса DISC-GRAN гранулярность сброса DISC-MAX сбросить максимальное количество байтов DISC-ZERO сбросить обнуление данных  WSAME записывает такое же максимальное количество байтов Уникальный идентификатор хранилища WWN RAND добавляет случайность PKNAME имя внутреннего родительского устройства ядра HCTL Хост: Канал: Цель: Lun для SCSI TRAN Тип транспорта устройства SUBSYSTEMS дедуплицированная цепочка подсистем REV версия устройства VENDOR производитель устройства Модель зоны ZONED DAX dax  -capable device  

Также можно использовать некоторые параметры, которые охватывают заранее определенный набор столбцов: вызов lsblk с -f (или - fs ) вариант, например, похож на его вызов, указав NAME , FSTYPE , LABEL , UUID , FSAVAIL , FSUSE% , MOUNTPOINT столбцы.

Изменение формата вывода

В предыдущих примерах мы видели, как вывод по умолчанию, созданный при вызове команды lsblk, представляет собой древовидное представление блочных устройств, подключенных к системе, и их дочерних или ведомых устройств. устройств. Однако есть несколько параметров, которые мы можем использовать для изменения способа отображения вывода.

Прежде всего, мы можем использовать параметр -d (короткий для - nodeps ) для отображения только родительских устройств. Вот результат вызова lsblk с указанной опцией:

  NAME MAJ: MIN RM SIZE RO TYPE MOUNTPOINTsda 8: 0 0 232.9G 0 disksr0 11: 0 1 1024M 0 romzram0 252  : 0 0 2,8 ГБ 0 диск [SWAP]  

Другой, очень интересный вариант, это -J или - json : с его помощью мы можем получить информацию о блочных устройствах и их отношениях в формате json :

  $ lsblk  -J {"blockdevices": [{"name": "sda", "maj: min": "8: 0", "rm": false, "size": "232.9G", "ro": false,  "type": "disk", "mountpoint": null, "children": [{"name": "sda1", "maj: min": "8: 1", "rm": false, "size":  "1G", "ro": false, "type": "part", "mountpoint": "/boot"}, {"name": "sda2", "maj: min": "8: 2", "  rm ": false," size ":" 231.9G "," ro ": false," type ":" part "," mountpoint ": null," children ": [{" name ":" luks-5794a0b4-7082  -4769-b86b-bd27a544361a "," maj: min ":" 253: 0 "," rm ": false," size ":" 231. 9G "," ro ": false," type ":" crypt "," mountpoint ": null," children ": [{" name ":" fingolfin_vg-root_lv "," maj: min ":" 253: 1 "  , "rm": false, "size": "35G", "ro": false, "type": "lvm", "mountpoint": "/"}, {"name": "fingolfin_vg-swap_lv", "  maj: min ":" 253: 2 "," rm ": false," size ":" 6G "," ro ": false," type ":" lvm "," mountpoint ":" [SWAP] "},  {"name": "fingolfin_vg-home_lv", "maj: min": "253: 3", "rm": false, "size": "15G", "ro": false, "type": "lvm"  , "mountpoint": "/home"}, {"name": "fingolfin_vg-data_lv", "maj: min": "253: 4", "rm": false, "size": "170G", "ro  ": false," type ":" lvm "," mountpoint ":"/mnt/data "}]}]}]}, {" name ":" sr0 "," maj: min ":" 11: 0 "  , "rm": true, "size": "1024M", "ro": false, "type": "rom", "mountpoint": null}, {"name": "zram0", "maj: min"  : "252: 0", "rm": false, "size": "2.8G", "ro": false, "type": "disk", "mountpoint": "[SWAP]"}]}  


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

Другой способ изменить отображаемый вывод – использовать параметр -l или - list , который производит вывод в виде списка. Однако при выборе этого вывода связи между устройствами опускаются, поскольку список по своей природе «плоский»:

  $ lsblk -lNAME MAJ: MIN RM SIZE  RO TYPE MOUNTPOINTsda 8: 0 0 232.9G 0 disksda1 8: 1 0 1G 0 part/bootsda2 8: 2 0 231.9G 0 partsr0 11: 0 1 1024M 0 romzram0 252: 0 0 2,8G 0 disk [SWAP] luks-5794a0b4-  7082-4769-b86b-bd27a544361a 253: 0 0 231.9G 0 cryptfingolfin_vg-root_lv 253: 1 0 35G 0 lvm/fingolfin_vg-swap_lv 253: 2 0 6G 0 lvm [SWAP] fingolfin_vg3-home_lv 253  -data_lv 253: 4 0 170G 0 lvm/mnt/data  

Чтобы организовать вывод в «парах», вместо этого мы можем использовать -P или - пары вариант:

  $ lsblk --pairsNAME = "sda" MAJ: MIN = "8: 0" RM  = "0" SIZE = "232.9G" RO = "0" TYPE = "disk" MOUNTPOINT = "" NAME = "sda2" MAJ: MIN = "8: 2" RM = "0" SIZE = "231.9G" RO  = "0" TYPE = "part" MOUNTPOINT = "" NAME = "luks-5794a0b4-7082-4769-b86b-bd27a544361a" MAJ: MIN = "253: 0" RM = "0" SIZE = "231. 9G "RO =" 0 "TYPE =" crypt "MOUNTPOINT =" "NAME =" fingolfin_vg-root_lv "MAJ: MIN =" 253: 1 "RM =" 0 "SIZE =" 35G "RO =" 0 "TYPE ="  lvm "MOUNTPOINT ="/"NAME =" fingolfin_vg-data_lv "MAJ: MIN =" 253: 4 "RM =" 0 "SIZE =" 170G "RO =" 0 "TYPE =" lvm "MOUNTPOINT ="/mnt/data  "NAME =" fingolfin_vg-swap_lv "MAJ: MIN =" 253: 2 "RM =" 0 "SIZE =" 6G "RO =" 0 "TYPE =" lvm "MOUNTPOINT =" [SWAP] "NAME =" fingolfin_vg-home_lv  "MAJ: MIN =" 253: 3 "RM =" 0 "SIZE =" 15G "RO =" 0 "TYPE =" lvm "MOUNTPOINT ="/home "NAME =" sda1 "MAJ: MIN =" 8: 1 "  RM = "0" SIZE = "1G" RO = "0" TYPE = "part" MOUNTPOINT = "/boot" NAME = "sr0" MAJ: MIN = "11: 0" RM = "1" SIZE = "1024M"  RO = "0" TYPE = "rom" MOUNTPOINT = "" NAME = "zram0" MAJ: MIN = "252: 0" RM = "0" SIZE = "2.8G" RO = "0" TYPE = "disk" MOUNTPOINT  = "[SWAP]"  

Еще один очень важный параметр, который полезно использовать, особенно в сценариях, – это -n , что является сокращением от - без заголовков . Этот параметр изменяет вывод таким образом, что строка заголовка и имя столбцов опускаются. Конкретный вариант использования будет следующим. Предположим, что в скрипт, который мы хотим получить тип файловой системы определенного раздела (предположим, это sda1 ), и «сохранить его» в переменной, мы могли бы написать:

   $ fsys = "$ (lsblk --noheadings -o FSTYPE/dev/sda1)"  

Выводы

В этом руководстве мы узнали о команде lsblk и о том, как ее можно использовать для получения информации о блочных устройствах, подключенных к системе, и их взаимосвязях. Мы узнали значение столбцов по умолчанию, отображаемых при вызове утилиты без каких-либо параметров или аргументов, мы увидели, как получить информацию об определенном устройстве, и различные параметры, которые мы можем использовать для



Статические диски без lsblk?

У меня есть минималистичная система busybox, которую я недавно пытался использовать, и я обнаружил небольшую проблему: в ней нет lsblk . Есть ли другая команда для вывода списка дисков, разделов и размеров, например lsblk ?

Некоторые, которые также не работают:

  • lsblk
  • lsusb
  • fdisk - l
  • cfdisk

Просматривая вики-страницу busybox, Я вижу, что он поддерживает команду df для определения использования диска.

Вы можете попробовать следующую команду.

df -h – Показать свободное место в смонтированных файловых системах.

На странице руководства busybox они предоставили примеры того, как использовать команду df .

Однако, как указал @nwildner, df будет отображать хранилище в смонтированной файловой системе, а не схемы, связанные с разделами. Чтобы узнать это, вы можете проверить файл ниже.

  cat/proc/partitions  

Как вы уже упоминали, fdisk -l не При работе с вышеуказанным файлом может содержаться информация о разделах.

fdisk -l произвел в моей системе следующий результат.

  Идентификатор конечных блоков начала загрузки устройства Система/dev/sda1 * 1 13 104391 83 Linux/dev/sda2 14 9726 78019672+ 8e Linux LVM  

Теперь я могу получить информация о разделах, если я использую cat /proc/partitions . Результатом будет

  major minor #blocks name 8 0 78125000 sda 8 1 104391 sda1 8 2 78019672 sda2 253 0 78019156 dm-0 253 1 72581120 dm-1 253 2 5406720  dm-2  

Старшее число – 8, что указывает на то, что это дисковое устройство. Второстепенные – это ваши разделы на одном устройстве. 0 – это весь диск, 1 – основной, 2 – расширенный и 5 – логический раздел. Остальное, конечно же, это размер блока и имя диска/раздела.

Не уверен, что это разумное предложение, но вы пробовали sudo fdisk -l , чтобы проверить, не он работает?

EDIT # 1

Вы также можете запустить $ df -T . Это еще одна команда, для выполнения которой не требуются привилегии суперпользователя. Однако это будет отчет для каждой точки монтирования.

Другая команда, которая может пригодиться, – это # file -sL/dev/sdXY . У этого есть один недостаток в том, что он не работает с полностью блочным устройством. Требуется передать точное устройство. Хотя вывод довольно аккуратный:

Ссылки

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


5

Похоже, что другие ответчики на самом деле не тестировали BusyBox . Вот единственные команды, которые работали с BusyBox в моих initramfs:

  • cat/proc/partitions показывает диск и размеры разделов в блоках (KiB)

  • blkid показывают метки разделов, UUID и типы (EXT4, NTFS, и т. д.)

Улучшите этот ответ
ответил 27 мая ’17 в 4:14
добавить комментарий |

Похоже, другие ответчики на самом деле не тестировали BusyBox. Вот единственные команды, которые работали с BusyBox в моих initramfs:

  • cat/proc/partitions показывает диск и размеры разделов в блоках (KiB)

  • blkid показывают метки разделов, UUID и типы (EXT4, NTFS, и т. д.)


0

команды занятого окна обычно немного более ограничены, чем полные версии, включенные в более крупные дистрибутивы, и предыдущий ответ не совсем касался этого, как я узнал, когда у меня была такая же проблема.

I нашел необходимую мне информацию (и многое другое) для файловых систем ext , используя tune2fs , которая была доступна во встроенном Linux, который я использую в данный момент. Не знаю, как это сделать для других типов размонтированных файловых систем.

  tune2fs -l/dev/sdbXY |  grep 'Блокировать' |  тр-с '' |  cut -f3 -d '' 4883781124096group:  

Это даст вам такой результат, потому что tr -s удаляет повторяющиеся пробелы и cut -f3 -d '' дает вам третье поле вывода. Просто удалите последовательные каналы, чтобы узнать больше о том, что происходит.

Первое число – это количество блоков, а второе – размер блока. Умножьте их вместе, чтобы получить ответ в байтах. Слово group: является просто аномалией фильтрации, и его можно игнорировать.

Улучшите этот ответ
отредактировано 23 ноября 2015 г. в 14:51
steve
17.7k22 золотых знака3636 серебряных знаков6161 бронзовых знаков
ответил 23 ноября 2015 в 14:36 ​​
добавить комментарий |

команды занятого окна обычно немного более ограничены, чем полные версии, включенные в более крупные дистрибутивы, и предыдущий ответ не совсем касался этого, поскольку я узнал, когда у меня была такая же проблема.

Я нашел необходимую мне информацию (и многое другое) для файловых систем ext , используя tune2fs , который был доступен во встроенной системе Linux, которую я использую в данный момент. Не знаю, как это сделать для других типов размонтированных файловых систем.

  tune2fs -l/dev/sdbXY |  grep 'Блокировать' |  тр-с '' |  cut -f3 -d '' 4883781124096group:  

Это даст вам такой результат, потому что tr -s удаляет повторяющиеся пробелы и cut -f3 -d '' дает вам третье поле вывода. Просто удалите последовательные каналы, чтобы узнать больше о том, что происходит.

Первое число – это количество блоков, а второе – размер блока. Умножьте их вместе, чтобы получить ответ в байтах. Слово group: – просто аномалия фильтрации, и ее можно игнорировать.

Оцените статью
futurei.ru
Добавить комментарий