• Linux parted 分区命令详解


    一、概述

    通常我们用的比较多的分区工具是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 [选项][设备 [命令 [参数]…]…]

    二、选项

    1. 选项 描述
    2. -h –help 显示此求助信息
    3. -l –list 列出所有设别的分区信息
    4. -i –interactive 在必要时,提示用户
    5. -s –script 从不提示用户
    6. -v –version 显示版本

    三、操作命令

    1. parted交互命令 说 明
    2. check NUMBER 做一次简单的文件系统检测
    3. cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER 复制文件系统到另一个分区
    4. help [COMMAND] 显示所有的命令帮助
    5. mklabel,mktable LABEL-TYPE 创建新的磁盘卷标(分区表)
    6. mkfs NUMBER FS-TYPE 在分区上建立文件系统
    7. mkpart PART-TYPE [FS-TYPE] START END 创建一个分区
    8. mkpartfs PART-TYPE FS-TYPE START END 创建分区,并建立文件系统
    9. move NUMBER START END 移动分区
    10. name NUMBER NAME 给分区命名
    11. print [devices|free|list,all|NUMBER] 显示分区表、活动设备、空闲空间、所有分区
    12. quit 退出
    13. rescue START END 修复丢失的分区
    14. resize NUMBER START END 修改分区大小
    15. rm NUMBER 删除分区
    16. select DEVICE 选择需要编辑的设备
    17. set NUMBER FLAG STATE 改变分区标记
    18. toggle [NUMBER [FLAG]] 切换分区表的状态
    19. unit UNIT 设置默认的单位
    20. Version 显示版本

    四、交互操作实例

    3.1 选择分区硬盘

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

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

    3.2 创建分区

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

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

    3.3 完成分区操作

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

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

    3.4 验证分区信息

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

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

    3.5 删除分区示例

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

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

    3.6 格式化操作

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

    1. [root@my-linux ~]# fdisk -l
    2. WARNING: GPT (GUID Partition Table) detected on '/dev/hdb'! The util fdisk doesn't support GPT. Use GNU Parted.
    3. Disk /dev/hdb: 3841.0 GB, 3841022206976 bytes
    4. 255 heads, 63 sectors/track, 267349 cylinders
    5. Units = cylinders of 16065 * 512 = 8225280 bytes
    6. Device Boot Start End Blocks Id System
    7. /dev/hdb1 1 267350 2147482623+ ee EFI GPT
    8. [root@my-linux ~]# mkfs.xfs /dev/hdb1
    9. [root@my-linux ~]# mkfs.xfs /dev/hdb2
    10. [root@my-linux ~]# mkdir /data1 /data2
    11. [root@my-linux ~]# mount /dev/hdb1 /data1
    12. [root@my-linux ~]# mount /dev/hdb2 /data2

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

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

    1. (parted) mkpart
    2. Partition name? []? dp1
    3. File system type? [ext2]? xfs
    4. Start? 0
    5. End? 500GB
    6. (parted) mkpart
    7. Partition name? []? dp2
    8. File system type? [ext2]? xfs
    9. Start? 500GB
    10. End? 3841GB
    11. (parted) print
    12. Model: VBOX HARDDISK (ide)
    13. Disk /dev/hdb: 3841GB
    14. Sector size (logical/physical): 512B/512B
    15. Partition Table: gpt
    16. Number Start End Size File system Name Flags
    17. 1 17.4kB 500GB 500GB dp1
    18. 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 查询硬盘分区

    1. fdisk -l
    2. or
    3. 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的性能存储数据

    5.6 查询/dev/sdl1的blkid

    blkid /dev/sdl1
    

    5.7 修改/etc/fstab

    vi /etc/fstab
    

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

    5.8 挂载文件系统,查询

    1. mount -a
    2. df -h

    六、非交互方式示例

    6.1 创建gpt分区表

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

    6.2 划分3个分区

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

    6.3 打印分区

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

    6.4 删除分区

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

    1. [root@my-linux ~]# parted /dev/sdb rm 1
    2. Information: You may need to update /etc/fstab.
    3. [root@my-linux ~]# parted /dev/sdb rm 2
    4. Information: You may need to update /etc/fstab.
    5. [root@my-linux ~]# parted /dev/sdb rm 3
    6. Information: You may need to update /etc/fstab.
    7. [root@my-linux ~]# parted /dev/sdb print
    8. Model: HP LOGICAL VOLUME (scsi)
    9. Disk /dev/sdb: 3841GB
    10. Sector size (logical/physical): 512B/4096B
    11. Partition Table: gpt
    12. Disk Flags:
    13. Number Start End Size File system Name Flags
    14. [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 问题

    1. (parted) mkpart primary 128 1048575
    2. Warning: You requested a partition from 128s to 1048575s.
    3. The closest location we can manage is 128s to 1048542s.
    4. Is this still acceptable to you?
    5. Yes/No? Yes
    6. Warning: The resulting partition is not properly aligned for best performance. <-----
    7. 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条目来直接计算所需的对齐
    获取如下值:

    1. # cat /sys/block/sdb/queue/optimal_io_size
    2. # cat /sys/block/sdb/alignment_offset
    3. # cat /sys/block/sdb/queue/physical_block_size

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

    For example:

    1. optimal_io_size = 1310720
    2. alignment_offset = 0
    3. physical_block_size = 512
    4. i.e 1310720+0/512 = 2560

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

    1. (parted) mkpart primary 2560 100% OR
    2. (parted) mkpart primary 2560 1000G
  • 相关阅读:
    数据可视化之快递行业发展,近几年我国快递行业业务量呈梯度级增长
    负载均衡架构设计技巧
    go-micro 安装
    【houdini vex】时间偏移
    算法与数据结构(第二周)——排序基础:插入排序法
    java计算机毕业设计数字化网上报修平台源代码+数据库+系统+lw文档
    windows平台下的mysql启动等基本操作
    harbor 安装
    异步性能不如同步?通过压测讨论应该如何设置线程数
    回归预测 | Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量回归预测
  • 原文地址:https://blog.csdn.net/zfw_666666/article/details/126744930