非交互式/命令行分区工具 GNU Parted

版权声明:个人原创,转载请注明出处,谢谢。 https://blog.csdn.net/weixin_44410537/article/details/86381813

概述

GNU Parted是一个在Linux系统下用于创建和操作分区表的程序,它与fdisk/gdisk程序最大的区别在于它除了“交互式模式”,还有一个其他程序所没有的“非交互式模式”,也叫“命令行模式”(简单起见,后文统一使用该名称),我们可以在Shell脚本里面直接使用Parted“命令行模式”给磁盘创建分区。
在嵌入式Linux系统启动的过程中一般是没有图形界面和用户交互来创建系统分区的,Parted“命令行模式”这个时候就可以在Shell脚本里面大显身手。接下来我们先简单介绍下Parted的“交互式模式”,然后描述Parted“命令行模式”以及相关实践。

交互式模式

Parted基本使用方法如下:

parted [options] device [command [argument]]

其中第一个"options"常用选项如下:

选项 说明
-h, --help 显示帮助信息
-l, --list 显示所有磁盘设备的分区表信息
-s, --script 非交互式/命令行模式
-v, --version 显示版本信息
-a alignment-type, --align alignment-type 设置新分区遵循的对齐方式

对齐方式"alignment-type"只能有如下4个选项:

对齐方式 说明
none 使用磁盘设备支持的最小对齐方式
cylinder 按照柱面对齐
minimal 使用磁盘拓扑信息提供的最小对齐。该值和 opt 值将使用磁盘提供的布局信息,将逻辑分区表地址对齐到磁盘上的实际物理块。min 值是将分区正确对齐到物理块所需的最小对齐,这可避免性能降低。
optimal 使用磁盘拓扑信息提供的最佳对齐。此值可在保证最佳性能的情况下对齐到物理块大小的倍数。

如果要显示所有磁盘设备的分区表信息,可以用如下命令:

 $ sudo parted -l

接下来我们进入Parted“交互式模式”,进入该模式可以输入"h"查看所有交互式命令和选项的说明,我们这里删除已有分区,之后创建两个新的主分区:

$ sudo parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) h
省略帮助信息...
(parted) rm                                                               
Partition number? 1                                                       
(parted) mkpart primary fat32 1MiB 8000MiB
(parted) mkpart primary fat32 8000MiB -1s
(parted) p
Model: SanDisk Cruzer Blade (scsi)
Disk /dev/sdb: 15.4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number  Start   End     Size    Type     File system  Flags
 1      1049kB  8389MB  8388MB  primary  fat32        lba
 2      8389MB  15.4GB  6988MB  primary  fat32        lba

注意:"-1s"指示磁盘的最后一个扇区(sector)。

命令行模式

进入“命令行模式”的常用格式是这样的:

parted -s device [command [argument]]

这里列出一些常用命令和参数(同样适用于之前的“交互式模式”):

命令 说明
mkpart [part-type fs-type name] start end 创建一个文件系统为 fs-type(如果指定)的 part-type 分区,以 start 开始,以 end 结束(缺省情况下,以兆字节为单位)。fs-type 可以是 fat16、fat32、ext2、HFS、linux-swap、NTFS、reiserfs 或 ufs 其中之一。part-type 应该是 primary、logical 或 extended 其中之一。
print 显示分区表
rm partition 删除分区
unit unit 将 unit 设置为显示位置和大小时使用的单位,以及在没有明确的单位后缀时,用于解释用户提供的位置和大小。unit 可以是 s(扇区)、B(字节)、kB、MB、GB、TB、%(设备大小的百分比)、cyl(柱面)、chs(柱面、磁头、扇区)或 compact(对于输入为兆字节,对于输出为某种用户友好形式)其中之一

下面我们尝试用“命令行模式”将16G的U盘分成3个主分区和一个逻辑分区, 首先是删除之前创建的两个分区,记得重新读取分区表信息。

$ sudo parted -s -a minimal /dev/sdb rm 1
$ sudo parted -s -a minimal /dev/sdb rm 2
$ sudo blockdev --rereadpt /dev/sdb

接下来我们按照sectors对齐("-a minimal"参数)来创建4个新的分区:

$ sudo parted -s -a minimal /dev/sdb mkpart primary 1s 7500000s
$ sudo parted -s -a minimal /dev/sdb mkpart primary 7500001s 15000000s
$ sudo parted -s -a minimal /dev/sdb mkpart primary 15000001s 22500000s 
$ sudo parted -s -a minimal /dev/sdb mkpart extended 22500001s 100% 
$ sudo parted -s -a minimal /dev/sdb mkpart logical 22500002s 100%
$ sudo blockdev --rereadpt /dev/sdb
$ sudo parted -s -a minimal /dev/sdb u s print
Model: SanDisk Cruzer Blade (scsi)
Disk /dev/sdb: 30031872s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number  Start      End        Size      Type      File system  Flags
 1      1s         7500000s   7500000s  primary
 2      7500001s   15000000s  7500000s  primary
 3      15000001s  22500000s  7500000s  primary
 4      22500001s  30031871s  7531871s  extended               lba
 5      22500002s  30031871s  7531870s  logical

注意:最后一个显示分区表命令里面的"u s"参数表示将 s(扇区) 设置为显示位置和大小时使用的单位,你也可是试试"u %", “u cyl”, "u chs"和"u compact"的结果,其中"u compact"的显示很人性化。

参考文档

Parted User’s Manual

猜你喜欢

转载自blog.csdn.net/weixin_44410537/article/details/86381813
今日推荐