22. 磁盘分区

    科技2026-09-28  13

    文章目录

    1.分区知识1.1 磁盘为什么要分区?1.2 磁盘设备及分区命名1.3 磁盘分区类型和特点 2.磁盘基本分区Fdisk2.1 添加一个20G的硬盘2.2. 分区** **2.3 .格式化2.4 挂载-使用2.5 检查结果2.6 总结 3. 永久挂载配置详解3.1 永久挂载一个设备3.2 /etc/fstab配置文件详解 4. 磁盘基本分区 >2T 方法4.1 磁盘的**parted工具**分区4.2 Gdisk分区工具4.3 dd命令 5. swap分区5.1 企业面试案例模拟 6 分区方案:非交互创建分区命令 7. 文件系统Snipaste_2020-10-10_09-11-06.png

    1.分区知识

    1.1 磁盘为什么要分区?

    为了更好的管理数据,类似于家庭为什么要有卧室 卫生间 厨房 客厅。

    1.2 磁盘设备及分区命名

    /dev 设备目录

    /dev/hda[a-z] IDE硬盘

    /dev/sda[a-z] SATA接口硬盘/U盘

    /dev/cdrom 光驱

    [root@web01 ~]# blkid ##查磁盘分区相关信息

    1.3 磁盘分区类型和特点

    主分区特点小结:

    1)是系统中必须要存在的分区,系统盘一般会选择主分区安装系统。

    2)分区数字编号只能是1-4,例如:SCSCI分区名为sda1、sda2、sda3、sda4。

    3)主分区最多四个,最少一个。

    扩展分区(Extend)小结

    1.不能直接存放数据,必须要再分逻辑分区

    2.一块磁盘最多1个扩展分区

    3.主分区+扩展分区总的数量不能超过4个

    2.磁盘基本分区Fdisk

    fdisk命令原理

    —> 修改mbr主引导信息中的64字节分区表

    ----> 使用fdisk分区,源数据还存在于磁盘

    为什么只能四个?

    分区表64字节, 一个分区表占用16字节---->> 主分区加扩展分区小于4个

    2.1 添加一个20G的硬盘

    (虚拟机操作)

    2.2. 分区** **

    fdisk /dev/sdb

    n 新建一个分区 m for help p 主分区 e 扩展分区 p 打印分区信息 d 删除分区 w 保存分区信息 q 退出不保存分区信息 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: 0x00097e28 Device Boot Start End Blocks Id System Command (m for help): Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-2097151, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +100M Partition 1 of type Linux and of size 100 MiB is set #重复曹组创建3个分区..... 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: 0x00097e28 Device Boot Start End Blocks Id System /dev/sdb1 2048 206847 102400 83 Linux /dev/sdb2 206848 616447 204800 83 Linux /dev/sdb3 616448 1230847 307200 83 Linux Command (m for help): n Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): e #添加拓展分区 Selected partition 4 First sector (1230848-2097151, default 1230848): Using default value 1230848 Last sector, +sectors or +size{K,M,G} (1230848-2097151, default 2097151): Using default value 2097151 Partition 4 of type Extended and of size 423 MiB is set Command (m for help): n # 添加逻辑分区logical All primary partitions are in use Adding logical partition 5 First sector (1232896-2097151, default 1232896): Using default value 1232896 Last sector, +sectors or +size{K,M,G} (1232896-2097151, default 2097151): +500M Value out of range. Last sector, +sectors or +size{K,M,G} (1232896-2097151, default 2097151): +100M Partition 5 of type Linux and of size 100 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: 0x00097e28 Device Boot Start End Blocks Id System /dev/sdb1 2048 206847 102400 83 Linux /dev/sdb2 206848 616447 204800 83 Linux /dev/sdb3 616448 1230847 307200 83 Linux /dev/sdb4 1230848 2097151 433152 5 Extended /dev/sdb5 1232896 1437695 102400 83 Linux

    w保存以后,分区表已经改了,内核还不知道

    通知内核分区表已经修改。

    [root@oldboy ~]# partprobe /dev/sdb

    2.3 .格式化

    mkfs.xfs /dev/sdb1 mkfs.xfs /dev/sdb2 mkfs.xfs /dev/sdb3 mkfs.xfs /dev/sdb5

    2.4 挂载-使用

    mount /dev/sdb1 /data1/ mount /dev/sdb2 /data2/ mount /dev/sdb3 /data3/ mount /dev/sdb4 /data5/

    前面我们已经提到过,如果需要使用磁盘的空间,需要准备一个空的目录作为挂载点,与该设备进行关联。

    mount主要是为文件系统指定一个访问入口。

    PS: 类似我的商场没有门,那么就无法进入购买商品,此时通过mount命令可以创建一个入口。给超市安装一个门。如图:

    1.通过mount进行挂载,但重启将会失效。我们称为临时生效。

    可以使用umount进行卸载。

    2.5 检查结果

    [root@container ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sdb1 1014M 33M 982M 4% /data1 /dev/sdb2 2.0G 33M 2.0G 2% /data2 /dev/sdb3 5.0G 33M 5.0G 1% /data3 /dev/sdb5 12G 33M 12G 1% /data5

    查看磁盘分区命令

    lsblk (-f 查看文件系统格式)

    df -h

    cat /proc/partitions

    2.6 总结

    练习:创建 1个P(主分区) 1G 1个E-->L(逻辑分区) 2G [root@web01 ~]# fdisk /dev/sdb ... sdb 8:16 0 5G 0 disk ├─sdb1 8:17 0 1G 0 part #主分区 ├─sdb2 8:18 0 1K 0 part #扩展分区占1K └─sdb5 8:21 0 2G 0 part #逻辑分区 sr0 11:0 1 1024M 0 rom

    PS: 生产分区建议,如无特殊需求直接使用整个磁盘即可,无需分区。

    创建个目录进行分别挂载!!

    3. 永久挂载配置详解

    3.1 永久挂载一个设备

    fdisk /dev/sdb #分区 P(1-4) + E–>L(5,6)

    mkdir /data1 #创建目录

    mkfs.ext4 /dev/sdb5 #格式化分区

    blkid #查看那uuid

    /dev/sdb5: UUID=“628b308b-e742-4824-8e21-9060f6e80ee7” TYPE=“ext4”

    ** **

    [root@container ~]# **vim /etc/fstab** #挂载设备

    UUID=6eefe97b-7876-4632-9550-5dd8cd81eef4 /data1 xfs defaults 0 0

    [root@container ~]#mount -a #重载/etc/fstab中的 挂载信息,可提示错误

    [root@container ~]# df -h

    文件系统 容量 已用 可用 已用% 挂载点

    /dev/sdb1 20G 33M 20G 1% /data1 《–读取/etc/fstab 加载该设备

    或者:

    echo " mount /dev/adb1 /data1" >> /etc/rc.local

    3.2 /etc/fstab配置文件详解

    要挂载的设备 挂载点(入口) 文件系统类型 挂载参数 是否备份 是否检查

    /dev/sdb1 /db1 xfs defaults 0 0

    第一列:可以使用UUID [root@container ~]# blkid /dev/sda1: UUID="723eb45d-9a1b-4e8f-b06d-cf9024302147" TYPE="xfs" /dev/sda2: UUID="yVHSU3-Cmkf-qsg9-6DNg-P87L-mCDN-VOHvcO" TYPE="LVM2_member" /dev/sdb1: UUID="3b0143a3-39af-4991-afab-01227fbe767c" TYPE="xfs" 第五列:是否进行备份。通常这个参数的值为0或者1 选项 含义 0 代表不做备份 1 代表要每天进行备份操作 2 代表不定日期的进行备份操作 第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整 选项 含义 0 不要检验磁盘是否有坏道 1 检验 2 校验 (当1级别检验完成之后进行2级别检验)

    4. 磁盘基本分区 >2T 方法

    前面我们已经了解到fdisk分区

    但fdisk不支持给高于2TB的磁盘进行分区。

    如果有单块盘高于2TB,,用parted工具修改分区表格式就可以分区了,使用parted工具分区

    1、能够识别大于2TB的磁盘存储空间

    2、MBR <<---->> GPT分区表格式间互相转换、会造成数据丢失

    ​ parted命令中MBR分区被称作msdos,其它分区如下:

    aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop

    ​ parted 修改分区会直接生效

    4.1 磁盘的parted工具分区

    练习

    1)parted -l #查看磁盘信息。 2)开始分区 [root@oldboy /mnt]# parted /dev/sdb GNU Parted 3.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) 3)修改分区表格式 在进行mbr转gpt时,硬盘的数据会被清除,需要提前备份。 mbr的硬盘转换成gpt,使用如下命令 mklabel gpt p 删除: (parted) rm 1 (parted) rm 2 创建分区 mkpart logical 1 10 #<==创建逻辑分区,大小10MB。 mkpart primary 11 20 #<==创建主分区,大小10MB。 mkpart primary 21 200 # 退出

    格式化:

    mkfs -t ext4 /dev/sdc1

    mkfs -t xfs /dev/sdc2

    挂载:

    mount /dev/sdc1 /mnt

    mount /dev/sdc2 /opt

    4.2 Gdisk分区工具

    Gdisk

    1、能够识别大于2TB的磁盘存储空间

    2、gdisk可以支持分区的数量 高达 128个 主分区 没有扩展,逻辑分区的概念。

    ​ MBR <<---->> GPT 互相转换、会造成数据丢失

    yum install gdisk -y

    lsblk #查看磁盘详情

    gdisk /dev/sdc

    mkfs.xfs /dev/sdc

    安装parted,通知内核立即生效,无需重启

    partprobe /dev/sdb

    mkdir /data_c

    mount /dev/sdc1 /data_c/

    df -h

    mount -o ro /dev/sdc1 /data_c/

    卸载(卸载挂载点目录名称、卸载挂载的设备名称)

    [root@container ~]# umount /data_c/

    [root@container ~]# umount /data_c/

    强制卸载 (你进入了挂载点的目录,然后无法卸载。需要强制卸载)

    [root@container data-c]# umount -lf /dev/sdc1

    4.3 dd命令

    具有复制文件、转换文件和格式化文本的功能。

    if=<输入文件>从指定文件中读取,全称input file※of=<输出文件>写入到指定文件,全称output file※bs=<字节数>一次读写的字节数,全称block size※count=<块数>指定复制block块的个数※

    范例1:读取MBR

    [root@oldboy ~]# dd if=/dev/sda of=mbr.bin bs=512 count=1 #<==读取0磁头0磁道1扇区内容。 [root@oldboy ~]# od -xa mbr.bin #<==以16进制解析1扇区内容。

    范例2:生成文件,模拟小磁盘。*****

    dd if=/dev/zero of=/dev/sdb bs=1M count=10

    范例3:制作Linux系统的ISO镜像。

    dd if=/dev/cdrom of=CentOS6_7.iso #类似cp /dev/cdrom CentOS6_7.iso 复制、镜像功能

    5. swap分区

    Swap分区在系统的物理内存不够时,将硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。

    PS: 当物理内存不够时会随机kill占用内存的进程,从而产生oom,临时使用swap可以解决。

    由于该进程非常的消耗内存,造成物理内存不够,系统会启用保护机制,干掉内存较高的程序

    sync:刷新文件系统缓冲区 -----> 将文件从缓存刷新到磁盘

    [root@container ~]# swapoff -a 关闭所有swap分区 [root@container ~]# free -m 查看内存空闲 total used free shared buff/cache available Mem: 972 227 433 7 312 544 Swap: 0 0 0 [root@container ~]# dd if=/dev/zero of=/dev/null bs=630M count=1000 /var/log/message 发现存在oom Mar 27 10:20:13 container kernel: Out of memory: Kill process 2123 (dd) score 629 or sacrifice child 为了避免物理内存不够用(使用swap硬盘空间来临时充当内存) [root@container ~]# swapon -a [root@container ~]# free -m #新开一个窗口,随时查看交换分区的状态 total used free shared buff/cache available Mem: 972 210 637 7 123 599 Swap: 2047 0 2047 [root@container ~]# dd if=/dev/zero of=/dev/null bs=1000M count=1000 #模拟swap被占满情况 [root@container ~]# free -m #查看 swap一但被使用,就会发现系统会越来越卡。 (分配内存,硬件空间模拟内存介质所以就很卡 )

    5.1 企业面试案例模拟

    企业实战案例:java服务系统环境虚拟内存耗尽故障及解决实践

    a.让开发查找程序泄露问题,这是解决问题的根本。

    b.同时运维也可以临时增大一些swap大小(这个问题治标不治本,关键还是找到程序问题才行)。

    c.优化内核参数,让系统尽量使用内存而不是swap(使用swap的系统会很慢),这里通过此问题引出第二个方法的解决实践,即swap分区的实践。

    1.增加swap分区解决swap耗尽方案实践—>>>

    1)使用普通物理分区创建swap [root@oldboyedu ~]# fdisk /dev/sdb #<==为sdb磁盘分区。 ...省略若干行... Command (m for help): n #<==创建新分区。 Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): p #<==选择主分区。 Selected partition 4 #<==编号为4。 First sector (718848-2097151, default 718848): #<==默认。 Using default value 718848 Last sector, +sectors or +size{K,M,G} (718848-2097151, default 2097151): +150M #<==给150M大小。 Partition 4 of type Linux and of size 150 MiB is set Command (m for help): p #<==查看分区结果。 ...省略若干行... Device Boot Start End Blocks Id System /dev/sdb1 2048 206847 102400 83 Linux /dev/sdb2 206848 411647 102400 83 Linux /dev/sdb3 411648 718847 153600 83 Linux /dev/sdb4 718848 1026047 153600 83 Linux Command (m for help): w #<==将分区结果写入分区表。 The partition table has been altered! ...省略若干行... Syncing disks. [root@oldboyedu ~]# partprobe /dev/sdb #<==将分区修改结果通知内核生效。 [root@oldboyedu ~]# mkswap /dev/sdb4 #<==格式化分区为swap格式。 [root@oldboyedu ~]# free -m #<==查看增加前虚拟分区大小。 total used free shared buff/cache available Mem: 1980 144 1673 19 162 1658 Swap: 917 0 767 #<==767m。 [root@oldboyedu ~]# swapon -a /dev/sdb4 #<==加载格式化好的分区到swap。 [root@oldboyedu ~]# free -m total used free shared buff/cache available Mem: 1980 144 1673 19 162 1658 Swap: 917 0 917 #<==增加了150m。 [root@oldboyedu ~]# swapoff /dev/sdb4 #<==取消增加的swap分区。 2)使用dd命令创建文件格式化swap [root@oldboy ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128 #<==使用dd创建虚拟的文件系统分区。 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 0.691843 s, 194 MB/s [root@oldboy ~]# mkswap /tmp/swap #<==格式化分区为swap格式。 Setting up swapspace version 1, size = 131068 KiB no label, UUID=e7f3b240-6c98-4c47-93f4-623f157aa46a [root@oldboy ~]# free -m #<==查看增加前虚拟分区大小。 total used free shared buff/cache available Mem: 972 114 574 7 284 680 Swap: 1023 0 1023 [root@oldboy ~]# chmod 0600 /tmp/swap #<==为文件安全授权0600(C7会提示你执行此步)。 [root@oldboy ~]# swapon /tmp/swap #<==加载格式化好的分区到swap。 [root@oldboy ~]# free -m total used free shared buff/cache available Mem: 972 114 574 7 284 680 Swap: 1151 0 1151 [root@oldboy ~]# swapon -s #<==显示磁盘swap情况。 Filename Type Size Used Priority /dev/sda2 partition 1048572 0 -2 /tmp/swap file 131068 0 -3 [root@oldboy ~]# swapoff /tmp/swap #<==测试完毕,卸载。 2.让系统优先使用物理内存而不是swap [root@oldboy ~]# cat /proc/sys/vm/swappiness #<==默认值。 30 编辑内核文件sysctl.conf,加入vm.swappiness = 5,配置过程如下。 [root@oldboy ~]# tail -1 /etc/sysctl.conf #<==查看编辑后的内容。 vm.swappiness=5 [root@oldboy ~]# sysctl -p #<==价值内核参数配置生效。 vm.swappiness = 5 #<== swappiness=0时,系统会最大限度使用物理内存,如果内存不足,扔会占用swap分区,swappiness=100时,系统会积极使用swap分区,并且把内存上数据及时加载到swap里。CentOS7默认设置为30。 [root@oldboy ~]# cat /proc/sys/vm/swappiness #<==通过proc来查看更改结果。 10 [root@oldboy ~]# echo 5 >/proc/sys/vm/swappiness #<==也可以直接这样调整,然后将命令加载到rc.local文件里。 3.直接清空swap分区数据和缓存数据 [root@oldboy ~]# sync #<==将缓冲区数据写入磁盘(强制将block数据写入磁盘,更新超级块)。 [root@oldboy ~]# echo 1 > /proc/sys/vm/drop_caches #<==清空cache缓存区。 [root@oldboy ~]# cat /proc/sys/vm/drop_caches 1 [root@oldboy ~]# swapoff -a #<==关闭swap分区。 [root@oldboy ~]# swapon -a #<==重启开启swap分区。

    6 分区方案:

    服务器角色分区建议优点RAID方案单机服务器如8G内存,300G硬盘/boot 1024Mswap 16G,内存大小8G*2/ 80G/var 20G(也可不分)/data 180G(存放web及db数据)数据盘和系统盘分开,有利于出问题时维护。视数据及性能要求,一般可采用raid5折中。负载均衡器(如LVS等)/boot 100-200Mswap 内存的1-2倍/简单方便,只做转发数据量很少。数据量小,重要性高,可采用RAID1负载均衡下的RS server/boot 100-200Mswap 内存的1-2倍/简单方便,因为有多机,对数据要求低。数据量大,重要性不高,有性能要求,数据要求低,可采用RAID0数据库服务器mysql及oracle如16/32G内存/boot 100-200Mswap 16G,内存的1倍/ 100G/data 剩余(存放db数据)数据盘和系统盘分开,有利于出问题时维护,及保持数据完整。视数据及性能要求主库可采取raid10/raid5,从库可采用raid0提高性能(读写分离的情况下。)存储服务器/boot 100-200Mswap 内存的1-2倍/ 100G/data(存放数据)此服务器不要分区太多。只做备份,性能要求低。容量要大。可采取sata盘,raid5共享存储服务器(如NFS)/boot 100-200Mswap 内存的1-2倍/ 100G/data(存放数据)此服务器不要分区太多。NFS共享比存储多的要求就是性能要求。视性能及访问要求可以raid5,raid10,甚至raid0(要有高可用或双写方案)监控服务器cacti,nagios/boot 100-200Mswap 内存的1-2倍/重要性一般,数据要求也一般。单盘或双盘raid1即可。三盘就RAID5,看容量要求加盘即可。

    非交互创建分区命令

    [root@oldboy ~]# parted /dev/sdb mklabel gpt Yes #<==非交互创建分区的实质就是将在交互窗口执行的命令作为参数。 Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? Information: You may need to update /etc/fstab. [root@oldboy ~]# parted /dev/sdb mkpart primary 0 500 Ignore #<==将交互执行的命令直接放在parted /dev/sdb后面就实现非交互分区了。 Warning: The resulting partition is not properly aligned for best performance. Information: You may need to update /etc/fstab. [root@oldboy ~]# parted /dev/sdb mkpart primary 500 1000 Information: You may need to update /etc/fstab. [root@oldboy ~]# parted /dev/sdb p #<==查看分区结果。 Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 1074MB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 500MB 500MB primary #<==分好的第一个500MB的分区。 2 501MB 1000MB 499MB primary #<==分好的第二个500MB的分区。

    特别提示:parted分区工具分区实时生效

    7. 文件系统

    简单地说,文件系统就是一种存储和组织计算机中数据文件的机制或方法,

    它使得对计算机内的数据的存储、访问和查找变得更容易、简单。

    如ext3(CentOS5.x)、ext4(CentOS6.x)、xfs(CentOS7.x)、zfs

    和Reiserfs或FAT、NTFS等都是常见文件系统。

    mkfs -t 指定文件系统类型(mkfs.ext4,mkfs.xfs) ----或mkfs. 指定

    fsck:检查并修复Linux文件系统

    三要素:

    1.处于非挂载状态。

    2.没有问题的磁盘不要执行。

    3.执行fsck前尽量备份。

    Processed: 0.009, SQL: 9