磁盘分区知识

1.1 磁盘为什么要分区?

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

1.2 磁盘设备及分区命名

/dev 设备目录

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

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

/dev/cdrom 光驱

clipboard.png

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

1.3 磁盘分区类型和特点

QQ图片20200326102409.jpg

主分区特点小结:

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

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

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

扩展分区(Extend)小结

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

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

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

1.4 分区常用命令

lsblk

blkid

fdisk /dev/sdb (gdisk > 2T)

partprobe /dev/sdb (分区完成后操作)

2.磁盘基本分区Fdisk

fdisk命令原理

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

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

为什么只能四个?

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

分区.png

分区1.png

2.1 添加一个20G的硬盘

(虚拟机操作)

clipboard.png

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 总结

image.png

Snipaste_2020-10-09_12-35-39.png

练习:创建  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级别检验)

clipboard.png

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

前面我们已经了解到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/sdc

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
为了避免物理内存不够用(使用硬盘空间来临时充当内存)

[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耗尽方案实践--->>>

5.1.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分区。

5.1.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          #<==测试完毕,卸载。

5.4 让系统优先使用物理内存而不是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,看容量要求加盘即可。

7.非交互创建分区命令

[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分区工具分区实时生效

8. 文件系统

image.png

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

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

如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前尽量备份。

Snipaste_2020-10-10_09-11-15.png

Snipaste_2020-10-10_09-11-06.png

原文地址:https://www.cnblogs.com/hypj/p/14436545.html