liunx 磁盘管理命令记录

时间:2021-07-29 19:08:38

Linux磁盘管理好坏管理直接关系到整个系统的性能问题。

Linux磁盘管理常用三个命令为df、du和fdisk。

  • df:列出文件系统的整体磁盘使用量
  • du:检查磁盘空间使用量
  • fdisk:用于磁盘分区
今天我们来说一下如何使用fdisk和parted分区工具来进行硬盘分区,、下面我来说一下在Linux系统中这两种硬盘分区工具的使用方法:

----------fdisk分区工具----------

   在我的另一篇文章里已经说过了在Linux系统中硬盘分区的概念了(http://blog.chinaunix.net/u3/112561/showart_2230401.html),所以在这里我就不多说了,有不懂的可以看看那篇
一、.下面来介绍fdisk分区工具的命令格式:
    fdisk是传统的Linux硬盘分区工具,也是Linux系统中最常用的一种硬盘分区工具之一,它的命令格式如下:
其中常用命令选项的说明如下:
-b sectorsize: 定义磁盘扇区的大小,有效值包括512、1024和2048,这个选项只对老版本的Linux操作系统有效。
-C cyls: 定义磁盘的柱面数,一般情况不需要对它进行定义,使用默认的就好。
-H heads: 定义分区表所使用的磁盘的碰头数,一般为255或16。
-S sects: 定义每条磁道的扇区数,一般为63。
-l :这是最常用到的一个命令选项,它是显示指定磁盘设备的分区表信息,例如查看/dev/sdb1这个磁盘设备的分区表信息就是:fdisk -l /dev/sdb1
-u :在显示分区表时,以扇区代替柱面作为显示的单位
-s partition: 在标准输出中以block为单位显示分区的大小。
-v :显示fdisk的版本信息。
device:就是磁盘的设备名称,IDE类型的磁盘设备名为[dev/hd[a-h]];而SCSI或SATA类型的磁盘设备名为[dev/sd[a-p]]。
    假如我要查看我电脑上的第一块磁盘的分区表信息(呵呵,我就一块硬盘)可以使用如下命令:fdisk -l /dev/sda(我的硬盘是SATA类型的)显示信息如图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
然后我们可以看一下它们各自对应磁盘设备文件:
使用命令:ll /dev/sda*  来查看如图:
朋友们可以自己尝试一下别的命令的作用,由于时间问题我在这里就不一一说了~!下面我们来看看如何使用fdisk工具来对硬盘分区吧。
二、fdisk交互模式:
    当我们使用了命令“fdisk+设备名”后,就可以进入fdisk程序的交互模式了,在交互模式中可以通过输入fdisk程序所提供的指令来完成相应的操作,其结果如图:
进入到这种模式时候,我们就可以通过输入fdisk的指令来执行相应的磁盘分区管理操作了,输入m可以获取fdisk的指令帮助信息:如图:
下面我们来看看各个指令的使用说明:
a :设置可引导标记
b :修改bsd的磁盘标签
c :设置DOS操作系统兼容标记
d :删除一个分区
l :显示已知的分区类型,其中82为Linux swap分区,83为Linux分区
m :显示帮助信息
n :增加一个新的分区
o :创建一个新的空白的DOS分区表
p :显示磁盘当前的分区表
q :退出fdisk程序,不保存任何修改
s :创建一个新的空白的Sun磁盘标签
t :改变一个分区的系统号码(比如把Linux Swap分区改为Linux分区)
u :改变显示记录单位
v :对磁盘分区表进行验证
w :保存修改结果并退出fdisk程序
x :特殊功能,不建议初学者使用
知道了上面这些命令的意义,可以说就会对一块硬盘进行分区了。下面我来举个例子来说明一下:
首先我拿虚拟机添加一块硬盘,大小为170G,然后对其进行分区:
1.首先输入“fdisk -l“命令来查看一下添加上硬盘没有,然后输入命令“fdisk /dev/sdb"来进入fdisk程序交互模式,如下图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
2.输入指令“n"来新建一个分区,这个时候系统会让你输入是新建主分区还是扩展分区,我选择主分区(p),然后输入分区号(因为我这是新的硬盘,还没有分过区,所以输入1代表第一个主分区),然后又是起始柱面,直接选择默认即可。最后输入你这块分区的大小,我这里是分的差不多50G吧!这样一个分区就分好了,然后你可以输入p指令来查看一下,如下图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
3.这次我再建立一个扩展分区,首先输入指令n来新建一个分区,然后输入e来选择扩展分区,再输入分区号(2),然后下面的都选择默认就OK了!建立好后使用指令 p来查看一下,如图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
4.下面我再在扩展分区里面建立两个逻辑分区,首先输入指令n,然后选择分区类型为l(逻辑分区)起始柱面选择默认,然后输入此逻辑分区的大小,我就分40G了。最后输入指令p来查看一下是否建立成功,如图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
5.同样的步骤建立另一个逻辑分区,这里就不多说了。下面来看一下如何修改一个分区的类型。
6.输入指令t来修改分区的类型(只需要输入分区类型对应的ID号即可),然后输入要修改的分区号,我这里是修改的sdb5(也就是说输入5就OK了)。最后输入分区的类型的ID号,如果不知道分区的类型对应的ID号,你可以输入“l"指令来查看分区类型所对应的ID号。如图:
7.查到分区类型的ID号后,你就可以输入对应的ID号来修改分区类型了,我这里把Linux分区改为Linux swap类型,从上图可知Linux swap类型所对应的ID为82,输入82后回车就完成 了修改,可以使用指令p来查看一下,如图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
8.上面这些就是整个使用fdisk分区工具对硬盘进行分区的过程,哦,别忘记最后一步了,你得输入指令w来对你所做的操作进行保存,保存后你可以使用fdisk -l /dev/sdb来查看是否分区成功。如图:
liunx 磁盘管理命令记录
9.上面我们对硬盘进行了分区,硬盘分完区之后是不能直接使用的,得格式化后才能使用,下面我们就对硬盘进行格式化。输入“mkfs.ext3"来把硬盘格式化成ext3类型的文件系统。具体mkfs命令的使用方法,可以自己使用man mkfs命令来查看,这里就不详细说明了。如图:
liunx 磁盘管理命令记录
10.输入mkfs.ext3 /dev/sdb1命令来对硬盘格式化,一个一个分区都要格式化完成才可以,有一个特殊的分区就是swap,可以使用命令mkswap /dev/sdb5来对swap类型的分区进行格式化。如下图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
11.格式化完文件系统后,你需要对磁盘进行挂载后才能够正常使用,挂载命令为mount,使用格式如下:
mount [-t  文件系统类型 ] 存储设备   挂载点(通常文件系统类型通常可以省略,系统会自动识别)
12.在挂载之前你需要新建一个挂载点,就是你想要把这块磁盘挂载到哪,然后你就把挂载点建立在哪就OK了。例如,上面例子中,我要对/dev/sdb1分区挂载,那么我先给它新建一个挂载点:mkdir /media/sdb1,然后执行:mount /dev/sdb1 /media/sdb1挂载点的名字可以随便起,挂载后你就可以往磁盘里写东西了,如图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
13.为了方便起见,我们还可以修改相关的配置文件,使得系统对某一个分区进行自动挂载,具体就是修改/etc/fstab配置文件来实现,我以上面例子把/dev/sdb1分区配置成每次系统启动时自动挂载到/media/sdb1下面,可以如下修改配置文件,如图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
14.按照上面所做当系统每次启动时,就会自动把/dev/sdb1分区挂载到/media/sdb1里,而不用我们每次进行手动挂载。
15.如果我们不想使用某一分区时,需要对它进行卸载,可以使用“umount + 设备挂载点”命令来进行卸载。如上例:umount /media/sdb1命令来进行卸载。
注意:有时候会遇到无法卸载的情况,遇到这种情况的原因是因为有其他用户或进程正在访问该文件系统导致的,在Linux系统中,是不允许对正在被访问的文件系统进行卸载操作的,只有当该文件系统上所有访问的用户或进程完成操作并退出后,这个文件系统才能被正常卸载。我们有两种方法来处理这种情况,一是用命令“lsof +挂载点”来查看到底是哪些进程正在访问该文件系统,查找出来后,使用kill命令将进程杀死来进行卸载。二是使用命令“fuser -k +挂载点”。加-k选项是使用命令fuser找出正在访问该文件系统的进程,加上-k选项就是找出来并杀死。通过以上两种方法就可以对一些无法卸载的文件系统进行卸载了。

----------parted分区工具----------

    parted是RHEL5下自带的另外一种分区软件,相对于fdisk,它的使用更加方便,同时它还提供了动态调整分区大小的功能。下面我来如何通过parted创建、删除磁盘分区、查看分区表、更改分区大小、创建文件系统以及如何使用parted交互模式。
一、parted简介:
    parted是另一款在linux下常用的分区软件,它支持的分区类型范围非常广,包括ext2、ext3、linux-swap、FAT、FAT32、reiserfs、HFS、jsf、ntfs、ufs和xfs等。它的命令格式如下:
parted [options] [device  [command [options...]...]]
其中的命令选项说明如下:
-h :显示帮助信息。
-i :交互模式。
-s :脚本模式。
-v :显示parted的版本信息。
device :磁盘设备名称,如/dev/sda.
command :parted指令,如果没有设置指令,则parted将会进入交互模式。
二、parted交互模式:
    与fdisk类似,parted可以使用命令“parted+设备名”进入交互模式。进入交互模式后,可以通过parted的各种指令来对磁盘分区进行管理,跟fdisk非常相似。我还以我电脑上的那块硬盘为例,如图是进入parted交互模式后又输入“help“命令帮助的界面:
-_-!汗,这里少了一张图,可能没复制上吧。。。你只要终端下输入“parted /dev/某个设备”就可以进入parted交互模式。
parted的各种操作指令和详细说明如下:

check NUMBER                                检查文件系统
cp [FROM-DEVICE]FROM-NUMBER TO-NUMBER      复制文件系统到另外一个分区
help[COMMAND]                             显示全部帮助信息或者指定命令的帮助信息
mklabel,mktable LABEL-TYPE                  在分区表中创建一个新的磁盘标签
mkfs NUMBER FS-TYPE                         在分区上创建一个指定类型的文件系统
mkpart PART-TYPE[FS-TYPE]START END          创建一个分区
mkparts PART-TYPE[FS-TYPE]START END         创建一个分区,并在分区上创建指定的文件系统
move NUMBER START END                       移动分区
name NUMBER NAME                            以指定的名字命名分区号
print [free|NUMBER|all]                     显示分区表、指定的分区或者所有设备
quit                                        退出parted程序
rescue START END                            修复丢失的分区
resize NUMBER START END                     更改分区的大小
rm NUMBER                                   删除分区
select DEVICE                               选择需要更改的设备
set NUMBER FLAG STATE                       更改分区的标记
toggle [NUMBER[FLAG]]                       设置或取消分区的标记
unit UNIT                                   设置默认单位
version                                     显示parted的版本信息
三、分区管理
1.查看分区
    在parted交互模式下输入print指令来查看分区(相当于fdisk的p指令),如图:
2.创建分区
    在parted交互模式下输入mkpart指令来创建磁盘分区,假如要创建一个开始位置为50G、结束位置为100G、文件系统类型为ext3的逻辑分区,可以使用如下指令来创建:
mkpart logical ext3 50G 100G  如图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
当然也可以只输入mkpart指令而不带任何参数,parted会一步步提示用户输入相关信息并最终完成分区创建,如图:
3.创建文件系统
    创建分区后,可以使用mkfs指令在分区上创建文件系统(也就是格式化),parted目前只支持ext2文件系统,还不支持ext3,如图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
4.更改分区大小
    使用resize指令可以更改指定分区的大小。需要更改大小的分区上面必须是已经创建了文件系统,否则会提示:Error:Could not detect file system.下面我以dev/sdb6为例来缩小22G,因为我现在磁盘已经用完了,所以不能加了!就减少吧!如图:
liunx 磁盘管理命令记录740)this.width=740;" border=0>
5.删除分区
    使用rm指令可以删除指定的磁盘分区,在进行删除操作前必须先把分区卸载,例如我要删除/dev/sdb6就是在parted交互模式下输入“rm“指令,然后输入要删除的分区号。如图:
    。。。。。。Shit!终于写完了,不容易啊,累死我了。都快1点多了-_-!赶紧睡觉去了!朋友们有什么不明白的给我留言,我闪。。。。。。
~~~~~~~~~~~~~~~~~

7.2.1 硬盘分区

过去,PC机硬盘一直使用32位PC-BIOS分区表和主引导记录(MBR),因此分区大小最大不能超过2TB,并且每个硬盘最多只能包含4个主分区。使用扩展分区可以打破4个主分区的限制。为解决2TB的限制,目前正逐步采用GPT(GUID Partition Tables,GUID分区表)替代PC-BIOS分区表。

fdisk曾是操作磁盘分区的标准命令。不过由于fdisk无法操作GPT分区,所以已慢慢弃之不用了。取而代之的是parted命令,更加强大,支持也更积极。

注意 如果偏爱使用图形界面工具划分硬盘分区、调整分区大小及其他硬盘操作,不妨试试gparted或qtparted分区工具。这两个工具的命令与软件包同名。

1. 用fdisk修改磁盘分区

fdisk命令可以列出和修改磁盘分区。记住,修改或删除分区可能会一并移除重要数据,写入磁盘前对自己所做的修改一定要心知肚明。以root权限键入下面的命令可以列出硬盘分区的相关信息:

  1. # fdisk -l                    列出各个磁盘分区
  2. Disk /dev/sda: 82.3 GB, 82348277760 bytes
  3. 255 heads, 63 sectors/track, 10011 cylinders
  4. Units = cylinders of 16065 * 512 = 8225280 bytes
  5. Device Boot    Start       End    Blocks   Id  System
  6. /dev/sda1   *         1        13    104391   83  Linux
  7. /dev/sda2            14      9881  79264710   83  Linux
  8. /dev/sda3          9882     10011   1044225   82  Linux swap

从命令输出可知,这个80GB的硬盘共划分为3个分区。第一个(/dev/sda1)为较小的/boot分区,配置成Linuxext3文件系统(Id 83)。注意,其中的星号(*)表明这个分区为可引导分区。第二个分区为根文件系统分区,同样采用ext3文件系统。最后一个分区为交换分区(Linux swap)。

注意 在Fedora 7及后继版本中,IDE和SCSI磁盘都采用/dev/sd?设备名,其中?代表一个字母(a、b或c等)。在RHEL5和较早版本的Fedora中,只有SCSI磁盘和U盘才使用/dev/sd?,IDE硬盘则使用/dev/hd?。

如有多个磁盘,fdisk -l会列出全部磁盘,除非明确指定要查看的磁盘:

  1. # fdisk -l /dev/sdb         列出某个磁盘的分区

使用fdisk命令时,直接指定某个磁盘且不带其他选项,即可操作指定磁盘:

  1. # fdisk /dev/sda            启动交互式fdisk会话,操作第一个磁盘
  2. Command (m for help): m     键入m列出下面的帮助信息
  3. Command action
  4. a   toggle a bootable flag
  5. b   edit bsd disklabel
  6. c   toggle the dos compatibility flag
  7. d   delete a partition
  8. l   list known partition types
  9. m   print this menu
  10. n   add a new partition
  11. o   create a new empty DOS partition table
  12. p   print the partition table
  13. q   quit without saving changes
  14. s   create a new empty Sun disklabel
  15. t   change a partition's system id
  16. u   change display/entry units
  17. v   verify the partition table
  18. w   write table to disk and exit
  19. x   extra functionality (experts only)
  20. Command (m for help):

显示提示符之后,即可使用上面列出的命令操作硬盘。具体来说,你可以使用p(显示结果与fdisk -l相同)、n(创建新分区)、d(删除现有分区)、l(列出已知文件系统类型)或t(更改分区文件系统类型)。下面举例说明几个fdisk命令:

  1. Command (m for help): d                 准备删除一个分区
  2. Partition number (1-4): 4               键入要删除的分区号
  3. Command (m for help): n                 创建新的磁盘分区
  4. First cylinder (1-4983, default 1): 1   设定起始柱面号(或直接回车)
  5. Last cylinder ... (default 4983): 4983  设定结束柱面号(或直接回车)
  6. Command (m for help): a                 设置可引导分区
  7. Partition number (1-3): 1               键入可引导分区号
  8. Command (m for help): t                 选择文件系统类型
  9. Partition number (1-3): 3               选择要修改的分区
  10. Hex code (type L to list codes):  82    将分区指定为交换分区

除非明确指定,否则新分区默认使用Linux ext3文件系统(83)。L命令与l命令等效,都能显示文件系统类型和十六进制代码。如上所示,键入82将分区指定为swap。其他比较常见的Linux分区包括Linux扩展(85)、Linux LVM(8e)、Linux软件raid(fd)和EFI/GTP(ee)。

Windows分区可以指定为HPFS/NTFS(7)、Windows 95 FAT32(b)、FAT16(6)或Windows 95 FAT32 LBA(c)。其他Unix类文件系统包括Minix(be或bf)、BSD/OS(e4)、FreeBSD(ee)、OpenBSD(ef)、NeXTSTEP(f0)、Darwin UFS(f1)和NetBSD(f4)。这些文件系统都有可能派上用场,比如需要恢复采用上述文件系统的备份存储介质时。

至此,分区表实际上并未做任何改动。如果十分确定之前的设置正确无误,只需键入w将上述改动写入分区表。准备放弃所有改动(或写入分区表之后退出)的话,可以直接键入q退出fdisk会话。

2. 用sfdisk复制分区表

使用sfdisk可以备份或复制磁盘分区表:

  1. # sfdisk -d /dev/sda > sda-table         将分区表备份至文件
  2. # sfdisk /dev/sda < sda-table            从文件恢复分区表
  3. # sfdisk -d /dev/sda | sfdisk /dev/sdb   在两个磁盘之间复制分区表

3. 用parted修改磁盘分区

和fdisk一样,parted也能列出或修改磁盘分区。此外,parted还具备其他一些实用功能。下面的示例使用parted列出分区:

  1. # parted -l
  2. Model: ATA FUJITSU MPG3409A (scsi)
  3. Disk /dev/sda: 41.0GB
  4. Sector size (logical/physical): 512B/512B
  5. Partition Table: msdos
  6. Number   Start   End     Size    Type      File system   Flags
  7. 1       32.3kB  206MB   206MB   primary   ext3          boot
  8. 2       206MB   39.5GB  39.3GB  primary   ext3
  9. 3       39.5GB  41.0GB  1536MB  primary   linux-swap

从命令输出可以看出磁盘采用的传统msdos磁盘标签(分区表)还是gpt标签。这里是msdos分区表。

键入parted,后面跟上要操作的存储设备名(如/dev/sda),便会以交互方式运行parted。只有一个存储设备的话,可以直接键入parted:

  1. # parted
  2. GNU Parted 1.8.6
  3. Using /dev/sda
  4. Welcome to GNU Parted! Type 'help' to view a list of commands.
  5. (parted)

交互方式使用parted时,可以键入整个命令,也可以只键入开头部分字符,并用Tab键补全整个命令(和bash shell里的做法相同)。这些命令一旦烂熟于心,只需键入一定数量的字母,能让parted猜到输入哪个命令即可。与CiscoiOS的用法一样:p代表print,mkl代表mklabel,不一而足。

警告 与fdisk不同,使用parted对分区所做的改动会立即生效,不用另行写入磁盘。总之,不要误以为直接退出parted就能撤销所有改动。

对于parted会话里的各个命令,既可以选择在输入命令时一起键入所有参数(例如mkpart logical ext3 10.7GB 17.0GB),也可以只输入命令本身(mkpart),parted会以交互方式指导随后的操作:

  1. (parted) mkpart                创建新分区
  2. Partition type?  [logical]? primary
  3. File system type?  [ext2]? ext3
  4. Start? 17GB
  5. End? 24GB

尽量不要使用mkpartfs,该命令无法正确创建ext3分区。可以用mkpart替代,创建一个ext3分区(如上所示),退出parted后用mkfs.ext3命令格式化分区。为创建新分区腾空间时,往往需要调整常见Linux分区的大小,示例如下:

  1. (parted) resize 2              调整分区大小
  2. Start? [1.2GB] 1.2GB
  3. End? [24GB] 10GB

警告 如果用的不是LVM,上述命令会破坏整个文件系统。

使用ntfsresize命令可以调整NTFS分区大小。在Fedora中,该命令隶属于ntfsprogs软件包。这个软件包还包含创建(mkfs.ntfs)、修复(ntfsfix)和获取NTFS分区相关信息(ntfsinfo)等命令