2023年11月25日发(作者:)

parted磁盘分区管理工具(一)

一.parted简介

Linux下磁盘分区管理的高级工具partedparted命令用来管理维护磁盘的分区。

GNUParted是一个用于对分区及其文件系统进行建立、修改、调整、检查、复制

等操作的一个工具。对于安装新的系统来说,使用GNUParted来为它进行分区是

十分方便的。此外,你还可以用它来检查磁盘的使用状况,在不同的磁盘之间复

制数据,甚至是映象磁盘——将一个磁盘的安装完好地复制到另一个磁盘中。

GNUParted是一个磁盘分区管理管理工具,它比fdisk更加灵活,功能也更丰富,

同时还支持GUID分区表(GUIDPartitionTable),这在IA64平台上管理磁盘时非常

有用。

GNUParted同时支持交互模式和非交互模式.它除了能够进行分区的添加,删除

等常见操作外,还可以移动分区,制作文件系统,调整文件系统大小,复制文件系

.

GNUParted的主页是:/software/parted一些库文件和前端可以

从这里下载:ftp///gnu/parted。你同样会找到许多邮件列表、如何

对该软件作贡献的指引以及其他许多有用的相关信息。

二.安装parted

1GNUParted依赖包

如果您亲自动手编译和安装GNUParted那么你需要先安装一些其他程序。如果

你要编译GNUParted,那么你还需要安装这些程序的普通包和开发包。

libuuid,e2fsprogs包中的一部分。如果没有这个包,那么您可以从下面这个网站

中获取它:

/tytso/www/linux/

如果您需要同时编译GNUPartede2fsprogs那么请注意,你需要对e2fsprogs

进行makeinstall

makeinstall-libs操作。

GNUReadline(可选),可以从下面这个网站中获取它:

ftp///gnu/readline

如果你需要编译Parted,,但你又没有readline,,那么你可以使用以下编译配置选

项来关闭Partedreadline功能:

./configure--disable-readline

GNUgettext(或其他兼容的软件)用于编译,如果你需要国际化支持

ftp///gnu/gettext

libreiserfs,如果你需要对reiserfs文件系统的支持

/

请注意,parted在每次运行时都会自动检测并载入libreiserfs来打开对reiserfs

支持。然而,libreiserfs还是非常新,未经过广泛的测试,有可能不是很完善。

2.编译GNUParted

如果你需要编译GNUParted,那么你只需要这样做:

$./configure

$make

然而,请留意一下这些配置选项

--without-readline

关闭readline.功能。这个选项对于制作急救磁盘非常有用,因为这些库可能不存

在。

--disable-debug

关闭调试功能

--disable-dynamic-loading

关闭动态载入程序库的功能(不过现在只有libreiserfs库支持该功能,因此我们

希望会有更多支持这个功能的库)动态载入是一个非常有用的功能,因为它能让

你使用libparted特别是在你不知道有哪些库可用的时候,这个功能显得更加有

用。当然,你可能会需要在特定的情况下关闭这个功能(如制作bootdisk

--disable-fs

关闭所有文件系统的支持

--disable-nls

关闭对本地语言的支持。使用旧版本的glibc时,这个选项会非常有用。(有时候

急救磁盘中的glibc版本会很旧)

--disable-shared

关闭共享库。在使用旧版本的GNUlibc时,如果发生了编译错误“spilledregister”

那么你可能需要使用这个选项。建立急救磁盘和引导盘时这个选项同样会很有用。

--disable-Werror

关闭编译时的警告信息的显示

--enable-discover-only

使perted只支持读

--enable-mtrace

打开malloc()调试

--enable-read-only

关闭写入功能(调试时使用)

三.GNUParted的图形界面

1GParted

一个基于GTK的分区工具,后台使用的正是GNUParted的库:libparted

2QtParted

基于QT的分区工具。有点像PQMagic。不过现在仍在开发之中,不能说十分稳

定。后台使用的也是GNUParted的库。

四.使用

parted

GNUParted有两种运行模式:命令行模式和交互模式。

1.命令行模式的选项

当你调用命令行模式时,parted的语法是这样的:

格式1#parted[option]device

格式2#parted[option]device[command[argument]]

格式1用于进入parted的交互模式,在该模式下输入parted的子命令对指定的硬

盘进行分区等操作。quit命令用于退出交互模式。

格式2:直接在命令行方式下对指定的硬盘进行分区等操作。

有几个选项可以供你使用。对于其他涉及分区细节的Parted命令,请参见下一节。

选项以一个横杠开头,而Parted命令前则没有这个横杠。

选项:

选项

说明

-h--help显示帮助信息

-i--interactive在必要时提示用户;进入交互模式

-l--list显示所有磁盘设备的分区表

-s--script从不提示用户

-v--version显示版本

命令:

命令

checkminor-num执行文件系统的简单检查

cpfromto

Help显示可用的命令列表

mklablelabel为分区表创建磁盘标签

mkfsminor-numfile-system-type创建类型为file-system-type的文件系统

mkpartpart-typefs-typestart-mbend-mb不创建新文件系统,而制作分区

mkpartfspart-typefs-typestart-mbend-mb制作分区并创建指定的文件系统

moveminor-numstart-mbend-mb移动分区

nameminor-numname仅为MACPC98磁盘标签的分区命名

Print显示分区表

rescuestart-mbend-mb拯救一个丢失的分区,从“start-mb”“end-mb”

resizeminor-numstart-mbend-mb重新划分分区大小,从“start-mb”“end-mb”

rmminor-num删除分区

selectdevice选择另一个设备来配置

setminor-numflagstate在分区上设置标志:state要么是on要么是off

Quit退出parted

描述

把文件系统从一个分区复制到另一个分区,

fromto是分区的次要号码

子命令:

命令

Help[command]打印命令的帮助信息,或指定命令的帮助信息

print[free|number|all]显示分区表,指定编号的分区,或所有设备的分区表

mkpartPART-TYPE

[FS-TYPE]STARTEND

rmNumber删除指定编号NUMBER的分区

说明

创建新分区。PART-TYPE是以下类型之一:primary(主

分区)extended(扩展分区)logical(逻辑分区)START

END是新分区开始和结束的具体位置

对指定编号NUMBER的分区设置分区标记FLAG。对于

PC常用msdos分区表来说,分区标记FLAG可有如下取

值:“boot(引导)“hidden(隐藏)“raid(软RAIDsetNumberFLAGSTATE

磁盘阵列)“lvm(逻辑卷)“lbaLBA,LogicBlock

Addressing模式)。状态STATE的取值是:onoff

设置默认输出时用UNIT表示磁盘大小,UNIT的常用取值

可以为:“MB”“GB”“%(占整个磁盘设备的百分之多

少)“compact(人类易读方式,类似于df命令中-hunitUNIT

数作用)“s扇区)“cyl(柱面)“chs柱面cylinders

磁头,heads:扇区,sectors的地址)

对指定编号NUMBER的分区创建指定类型FS-TYPE的文mkfsNUMBERFS-TYPE

件系统

mkpartfsPART-TYPE创建新分区同时创建文件系统。FS-TYPE是以下类型之

FS-TYPESTARTEND一:ext2fat16fat32linux-swapntfsreiserfsufs

cp[FROM-DEVICE]

将分区FROM-NUMBER上的文件系统完整地复制到分区

FROM-NUMBER

TO-NUMBER中,作为可选项,还可以指定一个来源硬盘

TO-NUMBER

的设备名称FROM-DEVICE,若省略可选项则在当前设备

上进行复制

将指定编号NUMBER的分区移动到从START开始END

moveNUMBERSTARTEND结束的位置上。注意:1只能将分区移动到空闲空间中;

2)虽然分区被移动了,但它的分区编号是不会改变的

resizeNUMBERSTARTEND

对指定编号NUMBER的分区调整大小。分区的开始位置

和结束位置由STARTEND决定

checkNUMBER

检查指定编号NUMBER分区中的文件系统是否有什么错

rescueSTARTEND恢复靠近位置STARTEND之间的分区

mklabel,mktable

创建一个新的LABEL-TYPE类型的空磁盘分区表,对于

LABEL-TYPE

PC而言msdos是常用的LABEL-TYPE。若是用GUID

区表,LABEL-TYPE应该为gpt

nameNUMBERNAME为指定编号NUMBER的分区命名为NAME

2Parted交互模式下的命令

GNUParted提供以下命令:

1check(检查)

格式:checknumber

检查编号中所指定的文件系统是否有什么错误.

例:

(parted)check1

检查分区1上的文件系统.

2cp(复制)

格式:cp[from-device]from-numberto-number

from-number件系到分to-number分区

to-number上的数据会被全部删除。你可以再指定一个来源硬盘的设备名称

from-device来指定来源分区所在的硬盘。

该命令支持以下文件系统:

*ext2,ext3(所提供的目标分区必须比源分区要大)

*fat16,fat32

*linux-swap(相当于再目标分区执行mkswap命令)

*reiserfs(如果安装了libreiserfs)

例:

(parted)cp/dev/hdb23

/dev/hdb上的第二个分区的内容复制到第三个分区上。

3help(帮助)

格式:help[command]

输出一个命令的帮助信息

例:

(parted)helpresize

输出rezize命令的帮助信息。

4mklabel(建立分区表)

格式:mklabellabel-type

建立一个label-type类型的磁盘分区表。新的分区表不会有任何分区。这个命令

通常不会破坏你的数据,但是它有可能让你的数据变得不可读。这是你就需要用

rescue命令来恢复分区。关于rescue命令的用法请参见后文。Parted能在各

种分区表上工作。

label-type必须是一下这些类型:

*bsd

*loop(rawdiskaccess)

*gpt

*mac

*msdos

*pc98

*sun

例:

(parted)mklabelmsdos

建立一个MS-DOS格式的分区表。这对于PC而言是一个非常常见的操作。

5mkfs(建立文件系统)

格式:mkfsnumberfs-type

在指定的分区上建立指定的文件系统。这个命令会破坏该分区上的所有数据。

该命令支持以下文件系统:

*ext2

*fat16,fat32

*linux-swap

*reiserfs(如果安装了libreiserfs)

例:

(parted)mkfs2fat32

在第二个分区上建立FAT32格式的文件系统。

6mkpart(建立新分区)

格式:mkpartpart-type[fs-type]startend

建立一个新的分区。若要建立非扩展分区,就最好用fs-type来指定文件系统。start

end是新分区开始和结束的具体位置。part-type是以下类型之一:primary(主分

区),extended(扩展分区),logical(逻辑分区).扩展分区和逻辑分区只对msdos

dvh分区表有效。

fs-type必须是以下文件系统:

*ext2

*fat16,fat32

*hfs,hfs+,hfsx

*linux-swap

*NTFS

*reiserfs

*ufs

例:

(parted)mkpartlogical0.0692.1

建立一个包含ext2文件系统的逻辑分区,其位置是从磁盘的开始位置(0.0)到

692.1M之间

7mkpartfs(建立分区及其文件系统)

格式:mkpartfspart-typefs-typestartend

建立一个新的分区,并在上面建立文件系统。与mkpart相似,分区的位置处于

beginend之间,默认的单位是MB.请勿使用这个命令来恢复一个被删除了的

分区(应使用mkpartpart-type是以下类型之一:primary(主分区),extended(扩

展分区),logical(逻辑分区).扩展分区和逻辑分区只对msdosdvh分区表有

效。fs-type必须是以下文件系统:

*ext2

*fat16,fat32

*linux-swap

*reiserfs(如果安装了libreiserfs)

例:

(parted)mkpartfslogicalext2440670

建立一个a包含ex2格式文件系统的逻辑分区。其开始位置是440MB,结束位置

670MB

8move(移动)

格式:movenumberstartend

该命令能将选定的分区在硬盘中移动。start可以指定一个新的分区的起始位置。

不过,你不能将一个分区移到另一个分区上。也就是说,你只能在空闲的地方中

移动分区。如果你想改变分区的大小,那么你所需要的命令是resize。另外,虽

然分区被移动了,但它的分区编号是不会改变的。

该命令支持以下文件系统:

*ext2,ext3(所提供的目标分区必须比源分区要大)

*fat16,fat32

*linux-swap

*reiserfs(如果安装了libreiserfs)

例:

(parted)move2150M500M

将编号为2的分区移动到硬盘中150M500M的位置。

9name(命名)

格式:namenumbername

为编号所指定的分区命名(只支持GPT,Mac,MIPSPC98格式的分区)。名字

可以用引号括起来。

例:

(parted)name2’SecretDocuments’

将第2个分区命名为’SecretDocuments’

10print(输出信息)

格式:print[number]

输出parted正在操作的硬盘的分区表的信息,或者是某一个具体分区的信息。

例:

(parted)print

Diskgeometryfor/dev/hda:0.000-2445.679megabytes

Disklabeltype:msdos

MinorStartEndTypeFilesystemFlags

10.031945.000primaryfat32boot,lba

2945.0002358.562primaryext2

32358.5622445.187primarylinux-swap

(parted)print1

Minor:1

Flags:boot,lba

FileSystem:fat32

Size:945.000Mb(0%)

Minimumsize:84.361Mb(0%)

Maximumsize:2445.679Mb(100%)

11quit(退出)

格式:quit

退出Parted.

只有当Parted退出后,Linux内核才会知道磁盘的设置已经被改变了。但是实际

上只要你一执行一条命令,更改马上就会写入磁盘。不过,磁盘缓存有可能延缓

写入的操作。

12rescue(恢复)

格式:rescuestartend

如果你不小心用Partedrm命令删除了一个分区,那么这个命令可以帮你恢复。

你需要给出所误删的分区的大概的开始和结束的位置。Parted就会在你给出的磁

盘区域内去寻找,如果找到这个分区,那么Parted就会询问你是否重新建立这个

分区。

例:

(parted)print

Diskgeometryfor/dev/hdc:0.000-8063.507megabytes

Disklabeltype:msdos

MinorStartEndTypeFilesystemFlags

10.0318056.032primaryext3

(parted)rm

Partitionnumber?1

(parted)print

Diskgeometryfor/dev/hdc:0.000-8063.507megabytes

Disklabeltype:msdos

MinorStartEndTypeFilesystemFlags

糟糕了!我们不小心删除了这个ext3分区。不怕,Parted可以将它起死回生。

(parted)rescue

Start?0

End?8056

Information:Aext3primarypartitionwasfoundat0.031MB->

8056.030MB.Doyouwanttoaddittothepartitiontable?

Yes/No/Cancel?y

(parted)print

Diskgeometryfor/dev/hdc:0.000-8063.507megabytes

Disklabeltype:msdos

MinorStartEndTypeFilesystemFlags

10.0318056.032primaryext3

呵呵。这就恢复了。

13resize(调整大小)

格式:resizenumberstartend

将编号所指定的分区调整大小。分区的开始位置和结束位置由startend决定。

resize不会改变分区的编号。注意,如果更改扩展分区的大小,那么你必须保证

新的分区大小能够容纳里面的逻辑分区。另外,在调整大小前你无须对分区进行

碎片整理。

该命令支持以下文件系统:

*ext2,ext3限制:新的分区开始位置必须和原来的开始位置相同。也就是说,

你只能向后扩展分区的大小。

*fat16,fat32

*hfs,hfs+,hfsx限制:新的分区开始位置必须和原来的开始位置相同。而且新

end必须小于原来的end。也就是说,你只能够缩小分区。

*linux-swap

*reiserfs(如果安装了libreiserfs)

例:

(parted)resize3200M850M

改变编号为3的分区的大小。其新的位置是200MB850MB之间。

14rm(删除分区)

格式:rmnumber

将编号所指定的分区删除。如果你误删了某个分区,那么你还可以用mkpart来挽

救它(而不是用mkpartds。注意,如果你使用的是MSDOS格式的分区表,那么

假如你删除了一个逻辑分区,那么该分区后面的逻辑分区的编号都会相应地向前

改变。例如,你删除了编号为6的逻辑分区,那么后面的78号逻辑分区的编号将

会改变,分别变成67号逻辑分区。若在Linux下。这意味着你可能要改变/etc/fstab

文件。

例:

(parted)rm3

将编号为3的分区删除。

15select(选择设备)

格式:selectdevice

选择Parted将要编辑的磁盘设备。这个磁盘设备可以是一个Linux硬盘设备,一

个软盘、一个软RAID磁盘阵或者是LVM逻辑卷。

例:

(parted)select/dev/hdb

选择/dev/hdb作为Parted所要编辑的设备。

16set(设置标记)

格式:setnumberflagstate

更改编号所指定的分区的标记。哪些标记可用是由你的分区表决定的。标记有两

种状态,要么是on(生效),要么是off(失效)

‘boot’(用于Mac,MS-DOS,PC98分区表)-如果你想从某个分区引导,那么你

应该将这个分区的boot标记设置为on对于MSDOS分区表,一个硬盘上只能

有一个分区是可引导的。如果你将LILO装到某个分区上,那么这个分区一定是

可引导的(也就是说你应该将安装了LILO的分区的boot标记设为on对于PC98

分区表,所有ext3分区都必须是设置为可引导的。Parted会对此强行操作)

‘lba’(用于MS-DOS分区表)-这个标记可以告诉MSDOSMSWindows9xMS

WindowsME等系统使用LBALogicBlockAddressing)模式。

‘root’(用于Mac分区表)-如果某分区是Linux系统的根分区,那么就要对该分区

启用这个标记。

‘swap’(用于Mac分区表)-如果某分区是Linux系统的交换分区,那么就要对

该分区启用这个标记。

‘hidden’(用于MS-DOS,PC98分区表)-启用这个标记能使一个分区隐藏起来。

(仅对微软的操作系统有效)

‘raid’(用于MS-DOS分区表)-启用这个标记能够告诉Linux系统这是一个软

RAID磁盘阵。

‘LVM’用于MS-DOS分区表)-启用这个标记能够告诉Linux系统这是一个LVM

逻辑。

使用print命令能够将所有能用的标记显示出来。

例:

(parted)set1booton

将编号为1的分区的boot标记设定为on(生效)

17unit(设置单位)

格式:unitunit

Parted选择一个表示磁盘大小的单位。之后,凡是关于磁盘的位置(如分区的

开始位置等等)的数字都是使用这个单位,你就可以不用给出单位后缀。(如:

果你选择了MB作为单位,那么512就代表512MB,你就不用额外打多个MB

类的东西)你可以使用下列单位:

‘s’:扇区(通常一个扇区的大小是512个字节)

‘B’byte

‘kB’kilobyte(1000bytes)

‘MB’megabyte(1000000bytes)

‘GB’gigabyte(1000000000bytes)

‘TB’terabyte(1bytes)

‘%’表示占整个磁盘设备的百分之多少(显而易见,这个数字必须在0100之间)

‘cyl’柱面(这个具体的位置和BIOSCHS地址有关)

‘chs’柱面(cylinders,磁头(heads,扇区(sectors)的地址(这个具体的位置

BIOSCHS地址有关)

‘compact’这是一个比较奇怪的单位。输入时是使用MB作为单位,输出时的单位

有可能不同,但是它确保输出时的单位能使用户一眼就看得出来磁盘的大小的,

而不用心里默默地进行复杂的换算。(例如。它会使用1GB而不是使用1024MB

使用2MB而不是2048KB

一般来说,Parted只会使用默认的单位进行输出,除非输入的时候你没有给出数

字的后缀。你可以在输入的数字后面加上一个单位来代替默认的单位(单位和数

字之间是没有空格的)。不过若你使用CHS地址作为单位时,你就不需要给定后

缀。使用chs地址的格式是:柱面:磁头:扇区。对你所给出的数字地址,Parted

可能进行一些调整。例如,当你使用GB作为单位时,分区位置可能会有+-500M

的误差。不过Parted总会尽量地使误差尽量地小。当然,你可以使用单位s(也

就是扇区)来指定一个精确的位置。若无法做到精确,Parted会让你给出一个最

接近的解决方案。另外,若你给出的数字为负数,那么就表示从磁盘的末尾开始

计算。如“-1s”就表示硬盘最后一个扇区,就是硬盘的最末尾处。

例:

(parted)unitcompact

(parted)print

Diskgeometryfor/dev/hda:0kB-123GB

Disklabeltype:msdos

NumberStartEndSizeTypeFilesystemFlags

132kB1078MB1077MBprimaryreiserfsboot

21078MB2155MB1078MBprimarylinux-swap

32155MB123GB121GBextended

52155MB7452MB5297MBlogicalreiserfs

(parted)unitchsprint

Diskgeometryfor/dev/hda:0,0,0-14946,225,62

BIOScylinder,head,sectorgeometry:14946,255,63.Eachcylinder

is8225kB.

Disklabeltype:msdos

NumberStartEndTypeFilesystemFlags

10,1,0130,254,62primaryreiserfsboot

2131,0,0261,254,62primarylinux-swap

3262,0,014945,254,62extended

5262,2,0905,254,62logicalreiserfs

(parted)unitmbprint

Diskgeometryfor/dev/hda:0MB-122942MB

Disklabeltype:msdos

NumberStartEndSizeTypeFilesystemFlags

10MB1078MB1077MBprimaryreiserfsboot

21078MB2155MB1078MBprimarylinux-swap

32155MB122935MB120780MBextended

52155MB7452MB5297MBlogicalreiserfs