如何按存储顺序列出分区?

如何按存储顺序列出分区?

告诉一般信息(容量、扇区大小等)后fdisk显示 8 列:sdXY、Boot、begin、end、扇区数、大小、标志、类型。

分区按其名称中的 Y 排序sdXY。有时(即当这是真的时)它会在其下方添加注释,表明它们未按存储顺序列出。

我怎样才能让fdisk(或任何其他适当的工具)列出按起始扇区排序的面向块的设备上的分区,即第三列

答案1

我不知道有哪个程序可以执行此操作,但如果您想要的只是分区列表,则排序很容易。例如,在我的系统上:

$ sudo fdisk -l
Disk /dev/nvme0n1: 953.87 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: SAMSUNG MZVLB1T0HBLR-000L7              
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 97ED36D9-B503-42C1-ACE5-3E2E49212F20

Device              Start        End    Sectors   Size Type
/dev/nvme0n1p1       2048     534527     532480   260M EFI System
/dev/nvme0n1p2     534528     567295      32768    16M Microsoft reserved
/dev/nvme0n1p3     567296  390625000  390057705   186G Microsoft basic data
/dev/nvme0n1p4 1998360576 2000408575    2048000  1000M Windows recovery environment
/dev/nvme0n1p5  390625280  509251583  118626304  56.6G Linux filesystem
/dev/nvme0n1p6  509253632 1935546367 1426292736 680.1G Linux filesystem
/dev/nvme0n1p7 1935546368 1998360575   62814208    30G Linux swap

Partition table entries are not in disk order.


Disk /dev/mapper/home: 680.1 GiB, 730253492224 bytes, 1426276352 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

我可以用以下方法进行排序:

$ sudo fdisk -l | grep -E '^(Devi|/dev)' | sort -nk2,2
Device              Start        End    Sectors   Size Type
/dev/nvme0n1p1       2048     534527     532480   260M EFI System
/dev/nvme0n1p2     534528     567295      32768    16M Microsoft reserved
/dev/nvme0n1p3     567296  390625000  390057705   186G Microsoft basic data
/dev/nvme0n1p5  390625280  509251583  118626304  56.6G Linux filesystem
/dev/nvme0n1p6  509253632 1935546367 1426292736 680.1G Linux filesystem
/dev/nvme0n1p7 1935546368 1998360575   62814208    30G Linux swap
/dev/nvme0n1p4 1998360576 2000408575    2048000  1000M Windows recovery environment

使用的命令是

  • grep -E '^(Devi|/dev)':使用扩展正则表达式 ( -E),它让我们可以使用|“或”。然后,正则表达式将匹配任何^以 ( ) 或Devi或开头的行/dev
  • sort -nk2,2:这将对第二个字段进行数字排序 ( -n),并且仅对第二个字段 ( -k2,2) 进行排序,而忽略该行的其余部分。

答案2

一种按分区在磁盘上的顺序列出分区的工具是 parted这样的,例如,如果您运行(作为 root),则使用sector 作为单位大小

parted /dev/sda unit s print 

你得到

Model: IS817 DISK (scsi)
Disk /dev/sda: 15728640s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start     End       Size      Type     File system  Flags
 1      2048s     1435647s  1433600s  primary  ext2         boot
 4      1435648s  1640447s  204800s   primary  ext3
 2      1640448s  1644543s  4096s     primary  ntfs
 3      1644544s  1710079s  65536s    primary  fat32        lba

另一个工具是lsblk(不需要是 root)及其--sort(或-x) 选项。
lsblk仅提供分区的起始扇区,因此如果您不需要结束扇区和扇区大小,您可以获得 la 的fdisk输出

lsblk -o name,start,size,parttype,parttypename /dev/sda
名称 起始尺寸 零件类型 零件类型名称
SD卡7.5G          
├─sda1 2048 700M 0x83 Linux
├─sda2 1640448 2M 0x7 HPFS/NTFS/exFAT
├─sda3 1644544 32M 0xc W95 FAT32 (LBA)
└─sda4 1435648 100M 0x83 Linux

要按起始扇区排序,只需添加-x start

lsblk -o name,start,size,parttype,parttypename -x start /dev/sda
名称 起始尺寸 零件类型 零件类型名称
SD卡7.5G          
sda1 2048 700M 0x83 Linux
sda4 1435648 100M 0x83 Linux
sda2 1640448 2M 0x7 HPFS/NTFS/exFAT
sda3 1644544 32M 0xc W95 FAT32 (LBA)

运行lsblk --help以获取所有可能的字段/列的详细列表。

相关内容