磁盘分区知识
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个
1.4 分区常用命令
lsblk
blkid
fdisk /dev/sdb (gdisk > 2T)
partprobe /dev/sdb (分区完成后操作)
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. 磁盘基本分区 >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. 文件系统
简单地说,文件系统就是一种存储和组织计算机中数据文件的机制或方法,
它使得对计算机内的数据的存储、访问和查找变得更容易、简单。
如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前尽量备份。