Linux 硬盘管理(高级)---分区、格式化、挂载、解除挂载

一、购买云硬盘并挂载
  • 注意:云硬盘必须和实例在同一个区域!
二、检测硬盘的分区表格式
  • 两种分区表格式:msdos(MBR)、GPT
  • 两种分区表格式的区别:
    • MBR:即“主引导记录”,是位于硬盘最前端的512字节的引导代码,包括446个字节的“主引导程序”,64个字节的分区表(每个分区16个字节,共4个分区),2个字节结束标志。由于分区只由16个字节控制,所以分区的大小被限制在2TB左右。

    • GPT:即“全局唯一标识分区表”,被用于替代MBR分区表。


      GPT分区表结构图
      • LBA0[1]存储了为了兼容性考虑而放置的传统MBR分区表,这样做有以下几个优点:
        1. 在不支持GPT启动的系统中,可以防止因为无法识别而删除分区的危险
        2. 在支持GPT启动的系统中,这部分存储了第一阶段用于启动的代码,还有一个标识为0xEE的分区,用以标识该硬盘使用GPT分区表
      • LBA1记录了分区表头,其中定义了硬盘的可用空间以及组成分区表的项的大小和数量,除此之外,还定义了诸如分区表头、备份分区表头、分区表项、备份分区表项、分区表项大小、数量、可用分区位置等等信息,一般来说,分区表项为128字节,有128个,占据32个LBA
      • LBA2-LBA33分区表项,记录了分区位置,属性(是否只读),分区名字
      • LBA-33 - LBA 2备份分区表项
      • LBA-1备份分区表头
  • 使用parted -l查看硬盘的分区表格式,其中Partition Table标识分区表格式。
$parted -l
Disk Flags: 

Model: Virtio Block Device (virtblk)
Disk /dev/vda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  53.7GB  53.7GB  primary  ext4         boot


Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End  Size  Type  File system  Flags
三、给硬盘分区
  • 给分区表为MBR的硬盘进行分区。
    • fdisk命令详解
      • 用法:
        1. fdisk [options] <disk> 给硬盘分区
        2. fdisk [options] -l <disk> 列出分区表信息
        3. fdisk -s <partition> 显示指定分区大小
      • 选项:
        [-b] 扇区单位大小
        [-c] 兼容模式
        [-u] 以扇区还是柱面为单位进行显示
        [-v] 显示fdisk的版本
        [-C -H -S] 柱面、磁头、扇区的数量
      • 分区命令
        a 将指定主分区标记为活动分区,活动分区可以有多个,不会有影响,只是表示这个分区可能存在系统,可以从这启动
        c 设置兼容性标记(废弃)
        d 删除一个分区
        g 创建一个新的空GPT分区表
        G 创建一个IRIX(SGI)分区表
        l 列出所有分区类型即对应编号
        m 打印菜单(就是这个菜单)
        n 创建一个新的分区
        o 创建一个新的空DOS 分区表
        p 打印分区表信息
        q 退出但不保存
        t 更改分区类型
        v 检验分区表,显示还有多少未分配的空间
        w 保存
        x 额外功能(慎用,除非熟知效果)
    • 分区说明
      1)MBR分区格式的最多只能有4个分区,由主分区以及扩展分区共享
      2)主分区至少要有一个,扩展分区最多有一个
      3)逻辑分区建立在扩展分区上,数量不限
    • 使用fdisk给硬盘分区
    //主分区1、2048为第一个起始扇区,大小5G
    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): 1
    First sector (2048-20971519, default 2048): 
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +5G
    Partition 1 of type Linux and of size 5 GiB is set
    //扩展分区2
    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): 
    First sector (10487808-20971519, default 10487808): 
    Using default value 10487808
    Last sector, +sectors or +size{K,M,G} (10487808-20971519, default 20971519): 
    Using default value 20971519
    Partition 2 of type Extended and of size 5 GiB is set
    //逻辑分区5
    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
    First sector (10489856-20971519, default 10489856): 
    Using default value 10489856
    Last sector, +sectors or +size{K,M,G} (10489856-20971519, default 20971519): 
    Using default value 20971519
    Partition 5 of type Linux and of size 5 GiB is set
    //打印分区表信息
    Command (m for help): p
    
    Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 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: 0xa799a350
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/vdb1            2048    10487807     5242880   83  Linux
    /dev/vdb2        10487808    20971519     5241856    5  Extended
    /dev/vdb5        10489856    20971519     5240832   83  Linux
    //确认正确后,保存退出
    Command (m for help): wq
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
  • 给分区表为GPT的硬盘进行分区
    • parted命令详情
      • 用法:parted [options] [device]
      • 选项:
        [-l] 列出所有块设备上的分区表信息
        [-m] 输出简化的格式化的信息
        [-v] 输出该命令的版本
        [-s] 非交互,适应于脚本
        [-a] 设置新分区的对齐方式,可选值:none、cylinder(按柱面对齐)、minimal(对齐到物理块的最小单元,可以发挥硬盘最大的效能)、optimal(在保证最佳性能的情况下,对齐到物理块的最小单元的倍数)
      • 命令:
        align-check [align-type] <partition-number> 检测指定分区是否是指定对齐方式(min、opt,可以同时满足两种对齐方式)
        help 打印命令项
        mklabel <label-type> 转换硬盘的分区表结构(从MBR到GPT会丢失所有的数据)
        mkpart <part-name> <start> <end> 创建一个分区
        name <partition-number> <name> 为指定分区改名
        print 打印分区表信息
        quit 退出
        rescue <start> <end> 当不小心删除了某个分区时,可以指定搜索范围,如果搜索到了残存的系统,将会恢复分区
        resizepart <partition-number> <end> 更改分区的结束位置
        rm <partition-number> 删除分区
        select <device> 选择需要进行操作的设备
        unit 设置显示单位,s(sector)、B、KiB(1024B)、MiB、GiB、TiB、KB(1000B)、MB、GB、TB、%、cyl(柱面)、chs、compact(自动单位)
        version 版本
    • 使用parted命令进行分区
    $parted -a opt /dev/vdb
    GNU Parted 3.1
    Using /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.  
    //创建一个分区,opt、min对齐,容量一半,文件系统ext4
    (parted) mkpart                                                           
    Partition name?  []? part1                                                
    File system type?  [ext2]? ext4                                           
    Start? 0%                                                                 
    End? 50% 
    //创建第二个分区,opt、min对齐,容量剩下全部,文件系统ext4
    (parted) mkpart                                                           
    Partition name?  []? part2                                                
    File system type?  [ext2]? ext4                                           
    Start? 50%                                                                
    End? 100%
    //打印查看结果
    (parted) print                                                            
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 10.7GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags: 
    
    Number  Start   End     Size    File system  Name   Flags
     1      1049kB  5369MB  5368MB               part1
     2      5369MB  10.7GB  5368MB               part2                                                               
    
    • 额外说明:
      1. 和fdisk不一样的是,它会直接生效,没有保存项
      2. 关于标记的命令没有列出
      3. 如何对齐到最优性能(opt):
四、格式化分区
  • mkfs命令用法:`mkfs -t [file-system-type] <device> [size]
  • 使用mkfs格式化分区
    注意:是格式化分区,而不是格式化硬盘(会清空所有分区数据,改变分区表结构),MBR格式的分局fdisk列出的分区的device的名字格式化就可以了,GPT格式的在硬盘设备名后加上分区序号就是分区名了
//格式化分区part1
$mkfs -t ext4 /dev/vdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310464 blocks
65523 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

//格式化分区part2
$mkfs -t ext4 /dev/vdb2
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310464 blocks
65523 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

//查看格式化后的情况
$parted -l
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name   Flags
 1      1049kB  5369MB  5368MB  ext4         part1
 2      5369MB  10.7GB  5368MB  ext4         part2
五、硬盘挂载到系统
  • mount命令使用详解

    • 用法:mount [options] <source> <directory>
    • 选项:
      [-a] 挂载所有记录在/etc/fstab的文件系统
      [-l] 列出所有已经挂载的信息,与/etc/mtab中同
      [-n] 不将变动写入/etc/mtab,/etc/mtab是记录所有挂载信息的文件,任何挂载的变动都会被写入该文件
      [-r] 以只读方式挂载,挂在后,不可对硬盘内的数据进行修改操作
      [-w] 以读写方式挂载
      [-t] 设置挂载时候的文件系统类型,如果设置的类型与硬盘中的文件系统类型不一致,将会报错
      [-o] 一些额外选项,某些选项即使不指定也是

      async:异步模式(默认)
      sync:同步模式
      auto/noauto:支持自动挂载(默认)/不支持自动挂载
      exec/noexec:支持将该文件系统上的应用程序应用为进程(默认)/不支持
      dev/nodev:支持在该文件系统上使用设备文件(默认)/不支持
      suid/nosuid:支持在该文件系统上使用特殊权限(默认)/不支持
      remount:重新挂载
      ro:只读模式
      rw: 读写模式(默认)
      user/nouser:允许普通用户挂载这个设备/不允许(默认)
      acl:启用此文件系统上的acl功能

  • mount命令额外说明:

    1. mount命令能够挂载的不仅仅只有硬盘,这里只列出了部分命令
    2. 如果挂载目标文件夹下不为空,则挂载后这些文件会被隐藏
    3. 查看当前挂载的设备,还可以查看/proc/mounts
  • 使用mount命令挂载分区:

//以读写方式挂载文件系统为ext4的分区part1
$mount -t ext4 /dev/vdb1 /local/ext_disk
//以只读方式挂载文件系统为ext4的分区part2
$mount -r -t ext4 /dev/vdb2 ext_ro_disk
//查看硬盘是否挂载成功
$df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vda1      ext4       50G  5.2G   42G  12% /
/dev/vdb1      ext4      4.8G   20M  4.6G   1% /local/ext_disk
/dev/vdb2      ext4      4.8G   20M  4.6G   1% /local/ext_ro_disk
六、解除挂载
  • umount命令详解
    [-a] 卸载所有文件系统
    [-A] 卸载所有挂载了指定设备的挂载点
    [-d] 如果卸载的是loop设备,则同使释放掉这个loop设备[2]
  • 使用umount卸载所有挂载了part2分区的目录
    umount -A /dev/vdb2
    //查看卸载结果
    $df -hT
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/vda1      ext4       50G  5.3G   42G  12% /
    /dev/vdb1      ext4      4.8G   20M  4.6G   1% /local/ext_disk
    

参考文档:
[1.Linux硬盘管理——MBR 与 GPT]
[2.Parted User’s Manual]
[3.How to align partitions for best performance using parted]
[4.Linux中挂载详解以及mount命令用法]


  1. LBA指的是逻辑区块地址,替代早期的CHS寻址方式,LBA以编号(从0开始)来定位区块

  2. loop设备是一个伪设备,目的是为了像访问块设备一样访问一个带有文件系统的文件,如光盘的ISO镜像,就可以创建为loop设备,并挂载,然后就可以像块设备一样访问了
    [-n] 不将更改写入/etc/mtab
    [-R] 递归卸载
    [-r] 如果卸载失败,则以只读方式重新挂载
    [-t] 仅仅卸除指定文件系统类型的设备

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343