如何以树状格式(主分区、扩展分区和逻辑分区)显示所有分区?

Bra*_*iam 14 command-line filesystems

我正在尝试找到类似于输出findmnt但使用卷而不是安装点的内容(示例):

TARGET                       TYPE        FSTYPE  
sda 
??sda1                       Primary     ext4
? ??/
??sda2                       Primary     NTFS    
??sda3                       Primary     ext4 
? ??/boot
??sda4                       Extended
  ??sda5                     Logical     ext4
  ? ??/home
  ??sda6                     Logical     ext4
    ??/var
Run Code Online (Sandbox Code Playgroud)

TYPE 和 FSTYPE 的显示是可选的,我更感兴趣的是树状布局。

的输出lsblk有些不完整,因为它没有显示主分区、扩展分区和逻辑分区之间的差异。(我知道我在这里很挑剔):

lsblk -a
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 186.3G  0 disk 
??sda1   8:1    0 106.6G  0 part 
??sda2   8:2    0  52.8G  0 part /media/F66E431C6E42D551
??sda3   8:3    0  1023M  0 part [SWAP]
??sda4   8:4    0     1K  0 part 
??sda5   8:5    0   953M  0 part /boot
??sda6   8:6    0   487M  0 part [SWAP]
??sda7   8:7    0    14G  0 part /
??sda8   8:8    0  10.5G  0 part /home
Run Code Online (Sandbox Code Playgroud)

我知道sda4扩展分区包括sda5, sda6, sda7,sda8逻辑分区;但如果我看到其他人的输出,我就不会知道了。如果不是partdisk它说pri logext将是一个很好的选择,至少我知道这种关系。但既然都是part……不好。

sudo fdisk -l 输出:

Disk /dev/sda: 200.0 GB, 200049647616 bytes
255 heads, 63 sectors/track, 24321 cylinders, total 390721968 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x1549f232

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63   223629311   111814624+   7  HPFS/NTFS/exFAT
/dev/sda2       225724416   336437306    55356445+   7  HPFS/NTFS/exFAT
/dev/sda3       223629312   225724415     1047552   82  Linux swap / Solaris
/dev/sda4       336439294   390721535    27141121    5  Extended
/dev/sda5       336439296   338391039      975872   83  Linux
/dev/sda6       338393088   339390463      498688   82  Linux swap / Solaris
/dev/sda7       339392512   368687103    14647296   83  Linux
/dev/sda8       368689152   390721535    11016192   83  Linux

Partition table entries are not in disk order
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 9

黑色

您可以使用该命令blkid来显示以下内容:

$ blkid
/dev/sda1: LABEL="SYSTEM_DRV" UUID="XXXXXX" TYPE="ntfs" 
/dev/sda2: LABEL="Windows7_OS" UUID="XXXXX" TYPE="ntfs" 
/dev/sda3: LABEL="Lenovo_Recovery" UUID="XXXX" TYPE="ntfs" 
/dev/sda5: UUID="XXXX" TYPE="ext4" 
/dev/sda6: UUID="XXXX" TYPE="LVM2_member" 
/dev/mapper/vg_grinchy-lv_root: UUID="XXXX" TYPE="ext4" 
/dev/mapper/vg_grinchy-lv_swap: UUID="XXXX" TYPE="swap" 
/dev/mapper/vg_grinchy-lv_home: UUID="XXXX" TYPE="ext4" 
Run Code Online (Sandbox Code Playgroud)

我已经从上面删除了 UUID,并用 X 替换了它们。blkid如果您想要不同的输出,该命令也可以采用参数。

例如:

$ blkid -o list
device                         fs_type      label         mount point                        UUID
----------------------------------------------------------------------------------------------------------------------------------
/dev/sda1                      ntfs         SYSTEM_DRV    (not mounted)                      XXXX
/dev/sda2                      ntfs         Windows7_OS   (not mounted)                      XXXX
Run Code Online (Sandbox Code Playgroud)

lsblk

的替代工具blkidlsblk. 您可以使用以下选项列出所有块设备:

$ lsblk -a
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                          7:0    0         0 loop 
loop1                          7:1    0         0 loop 
loop2                          7:2    0         0 loop 
loop3                          7:3    0         0 loop 
loop4                          7:4    0         0 loop 
loop5                          7:5    0         0 loop 
loop6                          7:6    0         0 loop 
loop7                          7:7    0         0 loop 
sda                            8:0    0 465.8G  0 disk 
??sda1                         8:1    0   500M  0 part /boot
??sda2                         8:2    0 465.3G  0 part 
  ??vg_totoro-lv_root (dm-0) 253:0    0 431.5G  0 lvm  /
  ??vg_totoro-lv_swap (dm-1) 253:1    0  13.8G  0 lvm  [SWAP]
  ??vg_totoro-lv_home (dm-2) 253:2    0    20G  0 lvm  /home
sr0                           11:0    1  1024M  0 rom  
Run Code Online (Sandbox Code Playgroud)

检查它的用法,它需要其他选项。


ter*_*don 8

如果你想要的lsblk只是显示你的主/逻辑分区,你应该能够通过组合fdisk和 解析来做到这一点。fdisk -l如果以 root 身份运行将列出所有分区,并将用以下标记扩展分区Ext'd

# fdisk -l | grep dev
Disk /dev/sda: 500.1 GB, 500107862016 bytes
/dev/sda1              63       80324       40131   de  Dell Utility
/dev/sda2   *       81920    30801919    15360000    7  HPFS/NTFS/exFAT
/dev/sda3        30801920   194643539    81920810    7  HPFS/NTFS/exFAT
/dev/sda4       194643601   976773119   391064759+   f  W95 Ext'd (LBA)
/dev/sda5       194643603   198836504     2096451    c  W95 FAT32 (LBA)
/dev/sda6       342951936   960387071   308717568   83  Linux
/dev/sda7       198840320   342949887    72054784   83  Linux
/dev/sda8       960389120   976773119     8192000   82  Linux swap / Solaris
Run Code Online (Sandbox Code Playgroud)

然后,您可以将其与一些解析结合起来以获得您想要的输出:

$ lsblk -a | perl -lpe 'BEGIN{open(A,"sudo fdisk -l |");
                      while(<A>){next unless /Ext/; 
                                 $k{$1}++ if /^.*?(...\d)\s/; }} 
                      @a=split(/\s+/);
                      $a[0]=~s/\W+//;
                      s/$a[5]/Extended/ if defined($k{$a[0]});'
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk 
??sda1   8:1    0  39.2M  0 part 
??sda2   8:2    0  14.7G  0 part 
??sda3   8:3    0  78.1G  0 part /winblows
??sda4   8:4    0     1K  0 Extended 
??sda5   8:5    0     2G  0 part 
??sda6   8:6    0 294.4G  0 part /home
??sda7   8:7    0  68.7G  0 part /
??sda8   8:8    0   7.8G  0 part [SWAP]
Run Code Online (Sandbox Code Playgroud)

我认为这是你能做的最好的事情,因为findmnt不会显示扩展分区,因为它们永远不会被安装。否则,您可以以相同的方式解析它。