linux下使用fdisk进行磁盘分区详解

  • A+
所属分类:linux技术
摘要

​ 当服务器插入一块硬盘,如果我们想要使用该硬盘,需要先使用磁盘分区管理工具进行磁盘分区,然后格式化分区,把分区挂载到目录

一.前言

​ 当服务器插入一块硬盘,如果我们想要使用该硬盘,需要先使用磁盘分区管理工具进行磁盘分区,然后格式化分区,把分区挂载到目录

上,才可以正式使用该硬盘存储文件。磁盘分区管理工具有很多,本文主要介绍fdisk,gdisk,parted,并进行比较。

二.关于磁盘分区的结构

1.磁盘的分区结构有两种,一种是MBR分区,一种是GPT分区,下面对两种结构的特点进行一一说明。

2.MBR(Master Boot Record)

  • ​ 是传统的分区机制,应用于绝大多数使用BIOS引导的PC设备(苹果使用EFI的方式),很多Server服务器即支持BIOS也支持EFI的引导方式;
  • ​ MBR支持32bit和64bit系统;
  • ​ MBR分区分为主分区(一块硬盘最多只能创建4个主分区)、扩展分区(一个扩展分区会占用一个主分区的位置)、逻辑分区(逻辑分区是基于扩展分区创建出来的,先有扩展分区,然后在扩展分区的基础上再创建逻辑分区;也就是说我们要使用逻辑分区,必须先要创建扩展分区,扩展分区的空间是不能被直接使用的,我们必须在扩展分区的基础上去建立逻辑分区,才能够被使用)。在Linux上使用扩展分区和逻辑分区最多可以创建15个分区;
  • ​ MBR只支持不超过2TB的硬盘。

3.GPT(GUID Partition Table)

  • ​ 是一个较新的分区机制,解决了MBR的很多缺点;
  • ​ 支持超过2TB的磁盘;
  • ​ 向后兼容MBR;
  • ​ 使用GPT分区的前提是底层硬件必须支持UEFI(Intel提出的取代BIOS的新一代的引导系统)才能使用,也就是底层硬件必须使用UEFI;
  • ​ GPT分区只支持64位操作系统;
  • ​ GPT分区列表支持最大128PB(1PB=1024TB),可以定义128个分区,没有主分区,扩展分区和逻辑分区的概念,所有分区都能格式化。

4.判断分区是GPT还是MBR的方法如下:

[root@node5 ~]# fdisk -l Disk /dev/sda: 37.6 GB, 37580963840 bytes, 73400320 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 label type: dos Disk identifier: 0x000b606a  #Disk label type: dos这行信息说明该分区是MBR分区 #如果显示Disk label type: gpt则说明该分区是GPT分区  #如下命令也可以查看 [root@node5 ~]# gdisk -l /dev/sda GPT fdisk (gdisk) version 0.8.10  Partition table scan:   MBR: MBR only   BSD: not present   APM: not present   GPT: not present    #还可以使用如下方法 [root@node5 ~]# parted -l  Model: VMware, VMware Virtual S (scsi) Disk /dev/sda: 37.6GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags:   Number  Start   End     Size    Type     File system  Flags  1      1049kB  1075MB  1074MB  primary  xfs          boot  2      1075MB  21.5GB  20.4GB  primary               lvm   #显示Partition Table: msdos,则是MBR分区 #显示Partition Table: gpt,则是GPT分区 

三.fdisk命令详解

进入fdisk命令窗口之后,输入m,可以查看所有的fdisk功能。

[root@node5 ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2).  Changes will remain in memory only, until you decide to write them. Be careful before using the write command.   Command (m for help): m Command action    a   toggle a bootable flag                                   # 切换可启动标志    b   edit bsd disklabel                           # 编辑磁盘标记    c   toggle the dos compatibility flag               # 切换dos兼容标志    d   delete a partition                        # 删除一个分区    g   create a new empty GPT partition table                  # 创建一个空的GPT分区表    G   create an IRIX (SGI) partition table                    # 创建一个IRIX分区表    l   list known partition types                   # 列出已知的分区类型    m   print this menu                          # 打印菜单                       n   add a new partition                                       # 添加一个分区    o   create a new empty DOS partition table                    # 创建一个空的DOS分区表    p   print the partition table                                 # 打印分区表    q   quit without saving changes                               # 退出不保存    s   create a new empty Sun disklabel                          # 创建一个空的sun磁盘标签    t   change a partition's system id                            # 改变一个分区的类型    u   change display/entry units                                # 改变显示的单位    v   verify the partition table                                # 验证分区表    w   write table to disk and exit                              # 写分区表并退出    x   extra functionality (experts only)                        # 高级功能     

四.使用fdisk进行磁盘分区

4.1 磁盘分区规划

本次磁盘分区的规划如下:创建一个主分区,一个扩展分区,其中扩展分区包含两个逻辑分区。

4.2 fdisk进行磁盘分区

使用fdisk对/dev/sdb硬盘进行分区。

#使用lsblk查看可以知道,sdb这块磁盘大小为1G [root@node5 ~]# lsblk NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT sda               8:0    0   35G  0 disk  ├─sda1            8:1    0    1G  0 part /boot └─sda2            8:2    0   19G  0 part    ├─centos-root 253:0    0   17G  0 lvm  /   └─centos-swap 253:1    0    2G  0 lvm  [SWAP] sdb               8:16   0    1G  0 disk  └─sdb1            8:17   0  200M  0 part   #对/dev/sdb这块磁盘进行分区 [root@node5 ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2).  Changes will remain in memory only, until you decide to write them. Be careful before using the write command.   Command (m for help): m            #查看帮助 Command action    a   toggle a bootable flag    b   edit bsd disklabel    c   toggle the dos compatibility flag    d   delete a partition    g   create a new empty GPT partition table    G   create an IRIX (SGI) partition table    l   list known partition types    m   print this menu    n   add a new partition    o   create a new empty DOS partition table    p   print the partition table    q   quit without saving changes    s   create a new empty Sun disklabel    t   change a partition's system id    u   change display/entry units    v   verify the partition table    w   write table to disk and exit    x   extra functionality (experts only)  Command (m for help): p              #打印分区表  Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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 label type: dos Disk identifier: 0x56e11754     Device Boot      Start         End      Blocks   Id  System /dev/sdb1            2048      411647      204800   83  Linux  #看到已经存在一个分区/dev/sdb1,我们先把/dev/sdb1给删除 Command (m for help): d         #删除分区 Selected partition 1 Partition 1 is deleted  Command (m for help): p        #打印分区表,再次查看分区表,发现/dev/sdb1已经被删除  Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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 label type: dos Disk identifier: 0x56e11754     Device Boot      Start         End      Blocks   Id  System   Command (m for help): n                  #新建分区 Partition type:    p   primary (0 primary, 0 extended, 4 free)             #主分区    e   extended                                            #扩展分区 Select (default p): p                                      #选择新建主分区 Partition number (1-4, default 1):                         #主分区号,会生成/dev/sdb1 First sector (2048-2097151, default 2048):                  #开始扇区,回车默认从2048开始 Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +50M     #分配主分区大小,在此为50M Partition 1 of type Linux and of size 50 MiB is set  Command (m for help): p              #打印分区表,可以看到已经创建了主分区/dev/sdb1  Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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 label type: dos Disk identifier: 0x56e11754     Device Boot      Start         End      Blocks   Id  System /dev/sdb1            2048      104447       51200   83  Linux  Command (m for help): n                    #新建分区 Partition type:    p   primary (1 primary, 0 extended, 3 free)    e   extended Select (default p): e                      #选择创建扩展分区 Partition number (2-4, default 2):          #扩展分区编号,在此我们直接回车,默认为/dev/sdb2 First sector (104448-2097151, default 104448):               #默认回车,从当前扇区开始 Using default value 104448 Last sector, +sectors or +size{K,M,G} (104448-2097151, default 2097151): +500M    #分配扩展分区大小,在此为500M Partition 2 of type Extended and of size 500 MiB is set  Command (m for help): n Partition type:    p   primary (1 primary, 1 extended, 2 free)    l   logical (numbered from 5) Select (default p): l                         #新建逻辑分区 Adding logical partition 5                    #默认逻辑分区编号为5 First sector (106496-1128447, default 106496):                 #逻辑分区起始位置 Using default value 106496 Last sector, +sectors or +size{K,M,G} (106496-1128447, default 1128447): +200M     #分配逻辑分区大小,在此为200M Partition 5 of type Linux and of size 200 MiB is set  Command (m for help): n      Partition type:    p   primary (1 primary, 1 extended, 2 free)    l   logical (numbered from 5) Select (default p): l                   #新建第二个逻辑分区 Adding logical partition 6 First sector (518144-1128447, default 518144):  Using default value 518144 Last sector, +sectors or +size{K,M,G} (518144-1128447, default 1128447):             #直接回车,默认分配剩余空间 Using default value 1128447 Partition 6 of type Linux and of size 298 MiB is set  Command (m for help): p  Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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 label type: dos Disk identifier: 0x56e11754     Device Boot      Start         End      Blocks   Id  System /dev/sdb1            2048      104447       51200   83  Linux /dev/sdb2          104448     1128447      512000    5  Extended /dev/sdb5          106496      516095      204800   83  Linux /dev/sdb6          518144     1128447      305152   83  Linux  #通过如上输出可知,/dev/sdb1为主分区,/dev/sdb2为扩展分区,扩展分区又包含两个逻辑分区/dev/sdb5和/dev/sdb6  Command (m for help): w            #保存分区信息并退出 The partition table has been altered!  Calling ioctl() to re-read partition table. Syncing disks.  [root@node5 ~]# lsblk NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT sda               8:0    0   35G  0 disk  ├─sda1            8:1    0    1G  0 part /boot └─sda2            8:2    0   19G  0 part    ├─centos-root 253:0    0   17G  0 lvm  /   └─centos-swap 253:1    0    2G  0 lvm  [SWAP] sdb               8:16   0    1G  0 disk  ├─sdb1            8:17   0   50M  0 part  ├─sdb2            8:18   0    1K  0 part  ├─sdb5            8:21   0  200M  0 part  └─sdb6            8:22   0  298M  0 part  sr0              11:0    1 1024M  0 rom    [root@node5 ~]# ls /dev/sdb* /dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb5  /dev/sdb6 

4.3 格式化分区

把分区格式化成你想要的文件系统。

#可以把分区格式化成各种文件系统 [root@node5 ~]# mkfs mkfs         mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.fat     mkfs.minix   mkfs.msdos   mkfs.vfat    mkfs.xfs       #把/dev/sdb1格式化成xfs文件系统 [root@node5 ~]# mkfs.xfs /dev/sdb1 mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs). mkfs.xfs: Use the -f option to force overwrite. [root@node5 ~]# mkfs.xfs -f /dev/sdb1 meta-data=/dev/sdb1              isize=512    agcount=2, agsize=6400 blks          =                       sectsz=512   attr=2, projid32bit=1          =                       crc=1        finobt=0, sparse=0 data     =                       bsize=4096   blocks=12800, imaxpct=25          =                       sunit=0      swidth=0 blks naming   =version 2              bsize=4096   ascii-ci=0 ftype=1 log      =internal log           bsize=4096   blocks=855, version=2          =                       sectsz=512   sunit=0 blks, lazy-count=1 realtime =none                   extsz=4096   blocks=0, rtextents=0  #把/dev/sdb5格式化成ext4文件系统 [root@node5 ~]# mkfs.ext4 /dev/sdb5 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 51200 inodes, 204800 blocks 10240 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=33816576 25 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group Superblock backups stored on blocks:  	8193, 24577, 40961, 57345, 73729  Allocating group tables: done                             Writing inode tables: done                             Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done  

4.4 创建挂载点/挂载目录

[root@node5 ~]# mkdir /sdb1 [root@node5 ~]# mkdir /sdb5 

4.5 挂载分区

[root@node5 ~]# mount /dev/sdb1 /sdb1  [root@node5 ~]# mount /dev/sdb5 /sdb5  [root@node5 ~]# df -hT Filesystem              Type      Size  Used Avail Use% Mounted on /dev/mapper/centos-root xfs        17G   11G  6.1G  65% / devtmpfs                devtmpfs  3.9G     0  3.9G   0% /dev tmpfs                   tmpfs     3.9G  8.0K  3.9G   1% /dev/shm tmpfs                   tmpfs     3.9G  8.8M  3.9G   1% /run tmpfs                   tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup /dev/sda1               xfs      1014M  125M  890M  13% /boot tmpfs                   tmpfs     785M     0  785M   0% /run/user/0 /dev/sdb1               xfs        47M  2.7M   45M   6% /sdb1 /dev/sdb5               ext4      190M  1.6M  175M   1% /sdb5 

4.6 设置开机自动挂载分区

磁盘分区使用mount手动挂载之后,还需要把挂载信息写入/etc/fstab文件中,不然重启之后,需要重新挂载。系统开机时会主动读

取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开

机启动之后手动进行挂载了。

[root@node5 ~]# echo "/dev/sdb1  /sdb1 xfs defaults 0 0 " >> /etc/fstab [root@node5 ~]# echo "/dev/sdb5  /sdb5 ext4 defaults 0 0 " >> /etc/fstab  #注释,/etc/fstab文件详解 #示例为: /dev/sda3              /home         ext4      defaults,noatime      0      2  /etc/fstab文件主要包括6段,依次是: <file system>  <dir>  <type>  <options>  <dump>  <pass> <file system> 要挂载的分区或存储设备 <dir>  挂载的目录位置 <type> 挂载分区的文件系统类型,比如:ext3、ext4、xfs、swap <options> 挂载使用的参数有哪些。举例如下: 	auto - 在启动时或键入了 mount -a 命令时自动挂载。 	noauto - 只在你的命令下被挂载。 	exec - 允许执行此分区的二进制文件。 	noexec - 不允许执行此文件系统上的二进制文件。 	ro - 以只读模式挂载文件系统。 	rw - 以读写模式挂载文件系统。 	user - 允许任意用户挂载此文件系统,若无显示定义,隐含启用 noexec, nosuid, nodev 参数。 	users - 允许所有 users 组中的用户挂载文件系统. 	nouser - 只能被 root 挂载。 	owner - 允许设备所有者挂载. 	sync - I/O 同步进行。 	async - I/O 异步进行。 	dev - 解析文件系统上的块特殊设备。 	nodev - 不解析文件系统上的块特殊设备。 	suid - 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。 	nosuid - 禁止 suid 操作和设定 sgid 位。 	noatime - 不更新文件系统上 inode 访问记录,可以提升性能。 	nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。 	relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断如 	mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能。 	flush - vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。 	defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw, suid, dev, exec, auto, nouser, async.  <dump>  dump 工具通过它决定何时作备份. dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 0 和 1 。0 表示忽略, 1 则进行备份。大部分的用户是没有安装 dump 的 ,对他们而言 <dump> 应设为 0。  <pass> fsck 读取 <pass> 的数值来决定需要检查的文件系统的检查顺序。允许的数字是0, 1, 和2。 根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为 2. 0 表示设备不会被 fsck 所检查。  

4.7 查看磁盘分区效果

[root@node5 ~]# df -hT /sdb1 Filesystem     Type  Size  Used Avail Use% Mounted on /dev/sdb1      xfs    47M  2.7M   45M   6% /sdb1  [root@node5 ~]# df -hT /sdb5 Filesystem     Type  Size  Used Avail Use% Mounted on /dev/sdb5      ext4  190M  1.6M  175M   1% /sdb5