开发者

Linux parted 分区命令使用解读

目录
  • 一、概述
    • 1.1 语法结构
  • 二、选项
    • 三、操作命令
      • 四、交互操作实例
        • 4.1 选择分区硬盘
        • 4.2 创建分区
        • 4.3 完成分区操作
        • 4.4 验证分区信息
        • 4.5 删除分区示例
        • 4.6 格式化操作
        • 4.7 交互创建分区的完整示示例
      • 五、非交互方式
        • 5.1 创建分区表
        • 5.2 将硬盘所有容量分给主分区
        • 5.3 查询磁盘的已有分区
        • 5.4 查询硬盘分区
        • 5.5 格式化分区
        • 5.6 查询/dev/sdl1的blkid
        • 5.7 修改/etc/fstab
        • 5.8 挂载文件系统,查询
      • 六、非交互方式示例
        • 6.1 创建gpt分区表
        • 6.2 划分3个分区
        • 6.3 打印分区
        • 6.4 删除分区
      • 七、MBR & GPT
        • 八、parted 分区对齐报错
          • 8.1 问题
          • 8.2 解决方案
        • 总结

          一、概述

          通常我们用的比较多的分区工具是fdisk命令,但由于fdisk只支持MBR分区,MBR分区表最大支撑2T的磁盘,所以无法划分大于2T的分区。而parted工具可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区。

          parted命令是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具。GPT格式的磁盘相当于原来MBR磁盘中原来保留4个partition table的4 16个字节,只留第一个16个字节,类似于扩展分区,真正的partition table在512字节之后,GPT分区方式没有四个主分区的限制,** 最多可达到128个主分区 **。下面我们看下parted命令的用法。

          1.1 语法结构

          parted [选项]… [设备 [命令 [参数]…]…]

          二、选项

          选项    描述

          • -h    –help 显示此求助信息
          • -l    –list 列出所有设别的分区信息
          • -i    –interactive 在必要时,提示用户
          • -s    –script 从不提示用户
          • -v    –version 显示版本

          三、操作命令

          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	创建一个分区
          mkpartfs PART-TYPE FS-TYPE START END	创建分区,并建立文件系统
          move NUMBER START END	                移动分区
          name NUMBER NAME	                    给分区命名
          print [devices|free|list,all|NUMBER]	显示分区表、活动设备、空闲空间、所有分区
          quit	                                退出
          rescue START END	                    修复丢失的分区
          resize NUMBER START END	                修改分区大小
          rm NUMBER	                            删除分区
          select DEVICE	                        选择需要编辑的设备
          set NUMBER FLAG STATE	                改变分区标记
          toggle [NUMBER [FLAG]]	                切换分区表的状态
          unit UNIT	                            设置默认的单位
          Version	                                显示版本

          四、交互操作实例

          4.1 选择分区硬盘

          首先类似fdisk一样,先选择要分区的硬盘,此处为/dev/hdb: ((parted)表示在parted中输入的命令,其他为自动打印的信息)

          [root@my-linux ~]# parted /dev/hdb
          GNU Parted 1.8.1
          Using /dev/hdb
          Welcome to GNU Parted! Type 'help' to view a list of commands.

          4.2 创建分区

          选择了/dev/hdb作为我们操作的磁盘,接下来需要创建一个分区表(在parted中可以使用help命令打印帮助信息):

          (parted) mklabel
          New disk label type? gpt    (我们要正确分区大于2TB的磁盘,应该使用gpt方式的分区表,输入gpt后回车)

          4.3 完成分区操作

          创建好分区表以后,接下来就可以进行分区操作了,执行mkpart命令,分别输入分区名称,文件系统和分区的起止位置

          (parted) mkpart
          Partition name? []? dp1
          File system type? [ext2]? xfs
          Start? 0           (可以用百分比表示,比如Start? 0% , End? 50%)
          End? 500GB

          4.4 验证分区信息

          分好区后可以使用print命令打印分区信息,下面是一个print的样例

          (parted) print
          Model: vbOX HARDDISK (ide)
          Disk /dev/hdb: 3841GB
          Sector size (logical/physical): 512B/512B
          Partition Table: gpt
          Number Start End Size File system Name Flags
          1 17.4kB 500GB 500GB dp1

          4.5 删除分区示例

          如果分区错了,可以使用rm命令删除分区,比如我们要删除上面的分区,然后打印删除后的结果

          (parted)rm 1               #rm后面使用分区的号码,就是用print打印出来的Number
          (parted) print
          Model: VBOX HARDDISK (ide)
          Disk /dev/hdb: 3841GB
          Sector size (logical/physical): 512B/512B
          Partition Table: gpt
          Number Start End Size File system Name Flags

          4.6 格式化操作

          在交互状态下,完成以后我们可以使用quit命令退出parted并使用系统的mkfs命令对分区进行格式化。

          [r编程客栈oot@my-linux ~]# fdisk -l
          WARNING: GPT (GUID Partition Table) detected on '/dev/hdb'! The util fdisk doesn't support GPT. Use GNU Parted.
          Disk /dev/hdb: 3841.0 GB, 3841022206976 bytes
          255 heads, 63 sectors/track, 267349 cylinders
          Units = cylinders of 16065 * 512 = 8225280 bytes
          Device Boot Start End blocks Id System
          /dev/hdb1 1 267350 2147482623+ ee EFI GPT
          [root@my-linux ~]# mkfs.xfs /dev/hdb1
          [root@my-linux ~]# mkfs.xfs /dev/hDB2
          [root@my-linux ~]# mkdir /data1 /data2
          [root@my-linux ~]# mount /dev/hdb1 /data1
          [root@my-linux ~]# mount /dev/hdb2 /data2

          4.7 交互创建分区的完整示示例

          按照上面的方法把整个硬盘都分好区,下面是一个分完后的样例

          (parted) mkpart
          Partition name? []? dp1
          File system type? [ext2]? xfs
          Start? 0
          End? 500GB
          (parted) mkpart
          Partition name? []? dp2
          File system type? [ext2]? xfs
          Start? 500GB
          End? 3841GB
          (parted) print
          Model: VBOX HARDDISK (ide)
          Disk /dev/hdb: 3841GB
          Sector size (logical/physical): 512B/512B
          Partition Table: gpt
          Number Start End Size File system Name Flags
          1 17.4kB 500GB 500GB dp1
          2 500GB 3841GB 1699GB dp2

          五、非交互方式

          5.1 创建分区表

          parted /dev/sdl mklabel gpt

          5.2 将硬盘所有容量分给主分区

          parted /dev/sdl mkpart primary 0% 100%

          5.3 查询磁盘的已有分区

          parted /dev/sdl print

          5.4 查询硬盘分区

          fdisk -l
          or
          lsblk

          5.5 格式化分区

          mkfs -t xfs /dev/sdl1

          文件系统EXT3,EXT4和XFS的区别:

          EXT3

          • (1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
          • (2)Ext3目前只支持32000个子目录
          • (3)Ext3文件系统使用32位空间记录块数量和i-节点数量
          • (4)当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块

          EXT4

          EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本。

          • (1)Ext4的文件系统容量达到1EB,而文件容量则达到16TB
          • (2)理论上支持无限数量的子目录
          • (3)Ext4文件系统使用64位空间记录块数量和i-节点数量
          • (4)Ext4的多块分配器支持一次调用分配多个数据块

          XFS

          • (1)根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
          • (2)采用优化算法,日志记录对整体文件操作影响非常小
          • (3) 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间
          • (4)能以接近裸设备I/O的性android能存储数据

          5.6 查询/dev/sdl1的blkid

          blkid /dev/sdl1

          5.7 修改/etc/fstab

          vi /etc/fstab

          编辑/etc/fstab使开机可知道挂载文件系统。

          5.8 挂载文件系统,查询

          mount -a
          df -h

          六、非交互方式示例

          6.1 创建gpt分区表

          [root@my-linux ~]# parted /dev/sdb mklabel gpt
          Information: You may need to update /etc/fstab.

          6.2 划分3个分区

          [root@my-linux ~]# parted /dev/sdb mkpart primary 0% 27%
          Information: You may need to update /etc/fstab.
           
          [root@my-linux ~]# parted /dev/sdb mkpart primary 27% 54%
          Information: You may need to update /etc/fstab.
           
          [root@my-linux ~]# parted /dev/sdb mkpart primary 54% 81%
          Information: You may need to update /etc/fstab.

          6.3 打印分区

          [root@my-linux ~]# parted /dev/sdb print
          Model: HP LOGICAL VOLUME (scsi)
          Disk /dev/sdb: 3841GB
          Sector size (logical/physical): 512B/4096B
          Partition Table: gpt
          Disk Flags: 
           
          Number  Start   End     Size    File system  Name     Flags
           1      2097kB  1037GB  1037GB               primary
           2      1037GB  2074GB  1037GB               primary
           3      2074GB  3111GB  1037GB               primary

          6.4 删除分区

          删除分区的命令是parted /dev/sdb rm 1其中最后的数字 1 表示分区编号。

          [root@my-linux ~]# parted /dev/sdb rm 1
          Information: You may need to update /etc/fstab.
           
          [root@my-linux ~]# parted /dev/sdb rm 2
          Information: You may need to update /etc/fstab.
           
          [root@my-linux ~]# parted /dev/sdb rm 3
          Information: You may need to update /etc/fstab.
           
          [root@my-linux ~]# parted /dev/sdb print        
          Model: HP LOjsGICAL VOLUME (scsi)
          Disk /dev/sdb: 3841GB
          Sector size (logical/physical): 512B/4096B
          Partition Table: gpt
          Disk Flags: 
           
          Number  Start  End  Size  File system  Name  Flags
           
          [root@my-linux ~]# 

          七、MBR & GPT

          MBR:MBR分区表(即主引导记录)大家都很熟悉。所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区

          GPT: GPT(即GUID分区表)。是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式。与MBR分区方式相比,具有如下优点。突破 MBR 4个主分区限制,每个磁盘最多支持128个分区。支持大于2T的分区,最大卷可达18EB。

          八、parted 分区对齐报错

          在使用parted创建分区时产生告警信息

          "Warning: The resulting partition is not properly aligned for best performance."

          这个问题RedHat官网有解析:https://Access.redhat.com/mt/zh-hans/solutions/184143

          8.1 问题

          (parted) mkpart primary 128 1048575
          Warning: You requested a partition from 128s to 1048575s.                 
          The closest location we can manage is 128s to 1048542s.
          Is this still acceptable to you?
          Yes/No? Yes                                                               
          Warning: The resulting partition is not properly aligned for best performance.          <-----
          Ignore/Cancel? C  

          忽略这个告警分区可以正常创建,只不过会影响磁盘性能。那么该如何创建一个正确对齐的分区呢?

          8.2 解决方案

          8.2.1 百分比

          一般来说只要正确的选择分区开始的位置就可以解决这个问题,但需要查询和计算一下相应的参数。通常相较于使用明确的开始和结束位置使用百分比可以更容易使分区对齐。

          mkpart primary 0% 100% or mkpart primary 0% 320GB 创建单个分区, 或

          mkpart primary 0% 50% and mkpart primary 50% 100% 创建两个编程客栈大小相等的分区。

          8.2.2 1MiB偏移量

          一般情况下,很大一部分磁盘的默认对齐粒度为1MiB,因此在大多数情况下,使用MiB作为mkpart中的单元就可以创建一个对齐的分区。由于磁盘空间上的第一个MiB包括0扇区中的遗留主引导记录(MBR)和紧随其后的gpt主表(如果是gpt类型),因此需要跳过磁盘上的第一个MiB,并从1MiB开始分区:

          mkpart primary 1MiB 100% 例如,创建单个分区。

          8.2.3 计算偏移量#

          如果使用百分比或1MiB偏移量不起作用,可以通过查询设备相应的sysfs条目来直接计算所需的对齐

          获取如下值:

          # cat /sys/block/sdb/queue/optimal_io_size
          # cat /sys/block/sdb/alignment_offset
          # cat /sys/block/sdb/queue/physical_block_size

          获取正确的偏移扇区数是将 optimal_io_size 和 alignment_offset 相加然后除以 physical_block_size.

          For example:

          optimal_io_size = 1310720
          alignment_offset = 0
          physical_block_size = 512
           
          i.e 1310720+0/512 = 2560

          现在创建分区的命令可以是:

          (parted)  mkpart primary 2560 100%    OR
          (parted)  mkpart primary 2560 1000G

          总结

          以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.cppjscns.com)。

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新运维

          运维排行榜