且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

浅谈在Linux中磁盘超出2T的管理方式

更新时间:2022-10-08 09:59:21

   在介绍2T以上硬盘的管理方式之前,先给大家介绍一下GPT。

    

    GPT全局唯一标识分区表(GUID Partition Table,缩写:GPT),其出现的目的是为了替代旧式的MBR,对于扇区为512字节的磁盘不支持2.2TB的分区,一些硬盘厂商注意到了这个局限性,比如:希捷和西部数据。并且他们将容量较大的磁盘升级到了4KB的扇区,这意味着MBR的有效容量上限提升到了8.8TB,看似“正确的”解决方案,在临时地降低了人们对GPT的需求的同时,也给市场带来了在有较大的块(block)的设备上从BIOS启动时,如何***的划分磁盘分区的困惑。


    且作为MBR的继承者,GPT正是为了解决MBR的诸多限制.


    GPT修复MBR的限制:

1、磁盘指针大小为64位,假设扇区为512字节,这意味着GPT可以处理的磁盘大小高达86亿TiB

2、GPT数据结构在磁盘上存储两次,开始和结束各一次,在因师傅或扇区导致损坏的情况下,这种重复提高了恢复的几率。

3、GPT将所有分区存储在单个分区表中(带有备份),因此扩展分区或逻辑分区没有存在的必要。GPT默认支持128个分区,当然也可以更改分区表的大小,如果分区软件支持这种更改的话。

4、MBR使用1字节分区类型代码,GPT使用一个16字节的全局唯一标识符(GUID)值来表示分区类型,这使分区类型更不容易冲突。

5、GPT支持存储人类可读的分区名称。(例如/home,/usr)

    MBR分区表结构:

                浅谈在Linux中磁盘超出2T的管理方式

    GPT分区表结构:

            浅谈在Linux中磁盘超出2T的管理方式


    LBA-0:

        在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR也叫做保护MBR(Protective MBR)。

        保护性MBR可以保护GPT磁盘不受MBR(fdisk)磁盘工具的危害。这些工具不能感知GPT,也无法正确地访问GPT磁盘。这就是用传统的fdisk工具为什么不能管理GPT分区的原因。

        另外GPT需要在内核中支持,但好在Linux一直都支持!

    LBA-1:

        分区表头(LBA-1):定义了硬盘的可用空间及组成分区表的项的大小和数量。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)

            分区表头记录的具体内容可以看下表

            浅谈在Linux中磁盘超出2T的管理方式


    LBA 2-33

        LBA 2–33的位置存放的是分区表项。GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。

                   GPT分区表项的格式

        浅谈在Linux中磁盘超出2T的管理方式

    

    看完这些基本概念是不是已经懵了,没关系,我也没有理解的特别透彻,你只要记住GPT的优点就好了,接下来介绍在Linux下面如何管理GPT分区。

    

    首先我们来用fdisk来试一下对2.2T以上的磁盘分区:

    浅谈在Linux中磁盘超出2T的管理方式

    从上面可以看到,fdisk警告最大可用仅为2199023255040 bytes,可以用parted分区管理工具管理GPT。

    下面开始介绍parted

        命令使用格式:    parted [options] [device [command [options...]...]]

        命令参数[options]:此处几个参数比较简单,不过多演示。

            -h 帮助信息

            -v查看版本信息

            -s免交互式

        交互式时的参数[command [options...]

            help(可以用简写h):帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) h                                                                
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices,
        free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright
        information of GNU Parted
(parted)

            p(print):列出分区表

            mklabel 设置标签类型:可选项有"aix", "amiga", "bsd", "dvh", "gpt", "loop", "mac","msdos", "pc98", or "sun"

1
2
3
4
5
6
7
8
(parted) mklabel gpt
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start  End  Size  File system  Name  Flags

            

            mkpart创建分区mkpart part-type [fs-type] start end

                part-type:分区类型,可选:"primary", "logical", or "extended".

                fs-type:与fdisk不同,parted是专门为linux设计的一种工具,所以支持的文件系统类型没有fdisk支持的那么多,但是也支持大部分linux文件系统:ext2、ext3、ext4、fat16、fat32、NTFSReiserFS、JFS、XFS、UFS、HFS、swap。(此选项可以省略,在格式化时指定文件系统类型后,parted会自动更改分区类型)
浅谈在Linux中磁盘超出2T的管理方式

            

            name partition name:设置分区名字,仅用于Mac,PC98,and GPT disklabels.

1
2
3
4
5
6
7
8
9
(parted) name 1 mageedu                                                   
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  2000GB  2000GB               mageedu

            

            set partition flag state:设置分区标志

                # 注意,此处flag得值,仅限:"boot",  "root",  "swap",  "hidden",  "raid",  "lvm",  "lba", "legacy_boot" and "palo".

                # stat的值:"on" or "off".

1
2
3
4
5
6
7
8
9
(parted) set 1 boot on                                                    
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  2000GB  2000GB               mageedu  boot

        

            toggle partition flag:取消或者开启分区标志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 (parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  2000GB  2000GB               mageedu  boot
 
 (parted) toggle 1 boot
 
 (parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  2000GB  2000GB               mageedu
 
 (parted) toggle 1 boot                                                    
 
 (parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  2000GB  2000GB               mageedu  boot

            

            align-check type partition检查分区类型是否满足类型的约束;

                    type 必须是 "minimal" or "optimal".(完整检查和最小化检查)

                    # 此处注意:一般是检查分区的文件系统类型是否满足,一般在格式化后操作

浅谈在Linux中磁盘超出2T的管理方式

# 这里之前我做了一次格式化(mkfs.ext4 /dev/sdc1)

浅谈在Linux中磁盘超出2T的管理方式

            

            rm partition:删除分区

                # 次处于fdisk有一个不同之处,parted删除分区1后,分区2不会变成1

浅谈在Linux中磁盘超出2T的管理方式

        好了,对parted的介绍就到这里了!

        在这里提醒一下各位,数据无价,对磁盘进行操作时,必须慎重慎重再慎重!!










本文转自 赵大鑫 51CTO博客,原文链接:http://blog.51cto.com/xinzong/1750472,如需转载请自行联系原作者