# lsblk

## NAME



           lsblk - list block devices
    


## SYNOPSIS



           **lsblk**[options] [_device_...]
    


## DESCRIPTION



           **lsblk** lists information about all available or the specified block
           devices. The **lsblk** command reads the **sysfs** filesystem and **udev db**
           to gather information. If the udev db is not available or **lsblk** is
           compiled without udev support, then it tries to read LABELs, UUIDs
           and filesystem types from the block device. In this case root
           permissions are necessary.
    
           By default, the command prints all block devices (except RAM
           disks) in a tree-like format. The same device can be repeated in
           the tree if it relates to other devices. The **--merge** option is
           recommended for more complicated setups to gather groups of
           devices and describe complex N:M relationships.
    
           The tree-like output (or **children[]** array in the JSON output) is
           enabled only if NAME column it present in the output or when
           **--tree** command line option is used. See also **--nodeps** and **--list**
           to control the tree formatting.
    
           The default output, as well as the default output from options
           like **--fs** and **--topology** , is subject to change. So whenever
           possible, you should avoid using default outputs in your scripts.
           Always explicitly define expected columns by using **--output**
           _columns-list_ and **--list** in environments where a stable output is
           required.
    
           Use **lsblk --list-columns** to get a list of all available columns.
    
           Note that **lsblk** might be executed in time when **udev** does not have
           all information about recently added or modified devices yet. In
           this case it is recommended to use **udevadm settle** before **lsblk** to
           synchronize with udev.
    
           The relationship between block devices and filesystems is not
           always one-to-one. The filesystem may use more block devices, or
           the same filesystem may be accessible by more paths. This is the
           reason why **lsblk** provides MOUNTPOINT and MOUNTPOINTS (pl.)
           columns. The column MOUNTPOINT displays only one mount point
           (usually the last mounted instance of the filesystem), and the
           column MOUNTPOINTS displays by multi-line cell all mount points
           associated with the device.
    


## OPTIONS



           **-A** , **--noempty**
               Don’t print empty devices.
    
           **-a** , **--all**
               Disable all built-in filters and list all empty devices and
               RAM disk devices too.
    
           **-b** , **--bytes**
               Print sizes in bytes rather than in human-readable form.
    
               By default, sizes are shown in units that are powers of 1024
               bytes. The formal abbreviations for these units (KiB, MiB,
               GiB, ...) are further shortened to just their first letter: K,
               M, G, ....
    
           **-H** , **--list-columns**
               List the columns that can be specified with the **--output**
               option. Can be used with **--json** or **--raw** to get the list in a
               machine-readable format.
    
           **-D** , **--discard**
               Print information about the discarding capabilities (TRIM,
               UNMAP) for each device.
    
           **-d** , **--nodeps**
               Do not print holder devices or slaves. For example, **lsblk**
               **--nodeps /dev/sda** prints information about the sda device
               only.
    
           **-E** , **--dedup** _column_
               Use _column_ as a de-duplication key to de-duplicate output
               tree. If the key is not available for the device, or the
               device is a partition and parental whole-disk device provides
               the same key than the device is always printed.
    
               The usual use case is to de-duplicate output on system
               multi-path devices, for example by **-E WWN**.
    
           **-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 if **--all** is not specified. The filter is
               applied to the top-level devices only. This may be confusing
               for **--list** output format where hierarchy of the devices is not
               obvious.
    
           **-f** , **--fs**
               Output info about filesystems. This option is equivalent to **-o**
               **NAME,FSTYPE,FSVER,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINTS**. The
               authoritative information about filesystems and raids is
               provided by the blkid(8) command.
    
           **--hyperlink**[**=**_when_]
               Print paths as terminal hyperlinks. The optional _when_ argument
               can be **always** , **never** , or **auto**. If the argument is omitted, it
               defaults to **auto** , which means that hyperlinks will only be
               used when the output goes to a terminal.
    
           **-I** , **--include** _list_
               Include devices specified by the comma-separated _list_ of major
               device numbers. The filter is applied to the top-level devices
               only. This may be confusing for **--list** output format where
               hierarchy of the devices is not obvious.
    
           **-i** , **--ascii**
               Use ASCII characters for tree formatting.
    
           **-J** , **--json**
               Use JSON output format. It’s strongly recommended to use
               **--output** and also **--tree** if necessary. Note that **children[]** is
               used only if NAME column or **--tree** is used.
    
           **-l** , **--list**
               Produce output in the form of a list. The output does not
               provide information about relationships between devices and
               since version 2.34 every device is printed only once if
               **--pairs** or **--raw** not specified (the parsable outputs are
               maintained in backwardly compatible way).
    
           **-M** , **--merge**
               Group parents of sub-trees to provide more readable output for
               RAIDs and Multi-path devices. The tree-like output is
               required.
    
           **-m** , **--perms**
               Output info about device owner, group and mode. This option is
               equivalent to **-o NAME,SIZE,OWNER,GROUP,MODE**.
    
           **-N** , **--nvme**
               Output info about NVMe devices only.
    
           **-v** , **--virtio**
               Output info about virtio devices only.
    
           **-n** , **--noheadings**
               Do not print a header line.
    
           **-o** , **--output** _list_
               Specify which output columns to print. Use **--list-columns** to
               get a list of all supported columns. The columns may affect
               tree-like output. The default is to use tree for the column
               'NAME' (see also **--tree**).
    
               The default list of columns may be extended if _list_ is
               specified in the format _+list_ (e.g., **lsblk -o +UUID**).
    
           **-O** , **--output-all**
               Output all available columns.
    
           **-P** , **--pairs**
               Produce output in the form of key="value" pairs. The output
               lines are still ordered by dependencies. All potentially
               unsafe value characters are hex-escaped (\x<code>). See also
               option **--shell**.
    
           **-p** , **--paths**
               Print full device paths.
    
           **-Q** , **--filter** _expression_
               Print only the devices that meet the conditions specified by
               _expression_. The filter is assessed prior to **lsblk** collecting
               data for all output columns. Only the necessary data for the
               lazy evaluation of the expression is retrieved from the
               system. This approach can enhance performance when compared to
               post-filtering, as commonly done by tools such as grep(1).
    
               This feature is EXPERIMENTAL. See also scols-filter(5).
    
               For example, to exclude sda and sdb, but print everything else
               ('!~' is a negative regular-expression matching operator):
    
                  lsblk --filter 'NAME !~ "sd[ab]"'
    
           **--highlight** _expression_
               Colorize lines matching _expression_.
    
               This feature is EXPERIMENTAL. See also scols-filter(5).
    
           **--ct** _name_[**:**_parameter_[**:**_function_]]
               Define a custom counter. Custom counters are printed after the
               standard output. The _name_ is the custom name of the counter,
               the optional _parameter_ is the name of the column to be used
               for the counter, and the optional _function_ specifies the
               aggregation function. Supported functions are: **count** , **min** ,
               **max** , **sum**. The default function is **count**. If _parameter_ is not
               specified, then the counter counts the number of lines.
    
               This feature is EXPERIMENTAL. See also **--ct-filter**.
    
               For example, **--ct MyCounter:SIZE:sum** reports the total of the
               SIZE values. To report the number of SATA disks, one can use:
    
                  lsblk --ct-filter 'TYPE=="disk" && TRAN=="sata"' \
                        --ct "Number of SATA devices"
    
           **--ct-filter** _expression_
               Define a restriction for the next counter.
    
               This feature is EXPERIMENTAL. See also **--ct** and
               scols-filter(5).
    
               For example, to aggregate sizes by device type:
    
                  lsblk --ct-filter 'TYPE=="part"' --ct Partitions:SIZE:sum \
                        --ct-filter 'TYPE=="disk"' --ct WholeDisks:SIZE:sum
    
           **-r** , **--raw**
               Produce output in raw format. The output lines are still
               ordered by dependencies. All potentially unsafe characters are
               hex-escaped (\x<code>) in the NAME, KNAME, LABEL, PARTLABEL
               and MOUNTPOINT columns.
    
           **-S** , **--scsi**
               Output info about SCSI devices only. All partitions, slaves
               and holder devices are ignored.
    
           **-s** , **--inverse**
               Print dependencies in inverse order. If the **--list** output is
               requested then the lines are still ordered by dependencies.
    
           **-T** , **--tree**[**=**_column_]
               Force tree-like output format. If _column_ is specified, then a
               tree is printed in the column. The default is NAME column.
    
           **-t** , **--topology**
               Output info about block-device topology. This option is
               equivalent to
    
               **-o**
               **NAME,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,SCHED,RQ-SIZE,RA,WSAME**.
    
           **-w** , **--width** _number_
               Specifies output width as a number of characters. The default
               is the number of the terminal columns, and if not executed on
               a terminal, then output width is not restricted at all by
               default. This option also forces **lsblk** to assume that terminal
               control characters and unsafe characters are not allowed. The
               expected use-case is for example when **lsblk** is used by the
               watch(1) command.
    
           **-x** , **--sort** _column_
               Sort output lines by _column_. This option enables **--list** output
               format by default. It is possible to use the option **--tree** to
               force tree-like output and than the tree branches are sorted
               by the _column_.
    
           **-y** , **--shell**
               The column name will be modified to contain only characters
               allowed for shell variable identifiers, for example, MIN_IO
               and FSUSE_PCT instead of MIN-IO and FSUSE%. This is usable,
               for example, with **--pairs**. Note that this feature has been
               automatically enabled for **--pairs** in version 2.37, but due to
               compatibility issues, now it’s necessary to request this
               behavior by **--shell**.
    
           **-z** , **--zoned**
               Print the zone related information for each device.
    
           **--sysroot** _directory_
               Gather data for a Linux instance other than the instance from
               which the **lsblk** command is issued. The specified directory is
               the system root of the Linux instance to be inspected. The
               real device nodes in the target directory can be replaced by
               text files with udev attributes.
    
           **--properties-by** _list_
               This option specifies the methods used by **lsblk** to gather
               information about filesystems and partition tables. The list
               is a comma-separated list of method names. The default setting
               is "file,udev,blkid". The supported methods are:
    
               **udev**
                   Reads data from udev DB. If unsuccessful, it continues to
                   the next probing method.
    
               **blkid**
                   Reads data directly from the device using libblkid. If
                   unsuccessful, it continues to the next probing method.
    
               **file**
                   Reads data from a file. This method is only used if the
                   --sysroot option is specified. This method always stops
                   probing if used.
    
               **none**
                   Does not probe. This method always stops probing.
    
           **-h** , **--help**
               Display help text and exit.
    
           **-V** , **--version**
               Display version and exit.
    


## EXIT STATUS



           0
               success
    
           1
               failure
    
           32
               none of specified devices found
    
           64
               some specified devices found, some not found
    


## ENVIRONMENT



           **LSBLK_DEBUG** =all
               enables **lsblk** debug output.
    
           **LIBBLKID_DEBUG** =all
               enables **libblkid** debug output.
    
           **LIBMOUNT_DEBUG** =all
               enables **libmount** debug output.
    
           **LIBSMARTCOLS_DEBUG** =all
               enables **libsmartcols** debug output.
    
           **LIBSMARTCOLS_DEBUG_PADDING** =on
               use visible padding characters.
    


## NOTES



           For partitions, some information (e.g., queue attributes) is
           inherited from the parent device.
    
           The **lsblk** command needs to be able to look up each block device by
           major:minor numbers, which is done by using _/sys/dev/block_. This
           sysfs block directory appeared in kernel 2.6.27 (October 2008). In
           case of problems with a new enough kernel, check that **CONFIG_SYSFS**
           was enabled at the time of the kernel build.
    


## AVAILABILITY



           The **lsblk** command is part of the util-linux package which can be
           downloaded from Linux Kernel Archive
           <https://www.kernel.org/pub/linux/utils/util-linux/>. This page is
           part of the _util-linux_ (a random collection of Linux utilities)
           project. Information about the project can be found at 
           ⟨https://www.kernel.org/pub/linux/utils/util-linux/⟩. If you have a
           bug report for this manual page, send it to
           util-linux@vger.kernel.org. This page was obtained from the
           project's upstream Git repository
           ⟨git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git⟩ on
           2025-08-11. (At that time, the date of the most recent commit that
           was found in the repository was 2025-08-05.) If you discover any
           rendering problems in this HTML version of the page, or you
           believe there is a better or more up-to-date source for the page,
           or you have corrections or improvements to the information in this
           COLOPHON (which is _not_ part of the original manual page), send a
           mail to man-pages@man7.org
    
    util-linux 2.42-start-521-ec46  2025-08-09                       _LSBLK_(8)
    


* * *