第1章 磁盘知识体系结构
1.1 磁盘知识体系结构
1) 磁盘的外部结构和内部结构
2) 磁盘阵列 RAID LVM 逻辑卷管理
3) 磁盘分区 主分区 扩展分区 逻辑分区
fdisk
parted
4) 磁盘格式化
5) 磁盘的使用 挂载
1.1.1 磁盘结构
1.1.1.1 外部结构
机械磁盘
固态磁盘
1.1.1.2 内部结构
1.1.1.2.1 磁盘的主轴
1.1.1.2.2 磁盘的转速
家用: 5.4K 7.2K
企业: 10K 15K
1.1.1.2.3 磁盘盘片
作用:存储数据
磁头:
作用:
a)读写数据
b)盘面的数量等于磁盘磁头的数量
c)磁盘接口
连接主板
接口类型
IDC 淘汰
SCSI 淘汰
SATA
SAS
SSD
PCI-E
1.1.1.2.4 磁盘(Disk)
1.1.1.2.5 磁头(Head)
作用说明:用来写入和读取数据的
特点说明:盘面数量等于磁头数量
工作原理:采用径向运动读写数据
1.1.1.2.6 磁道(Track)
作用说明:用来存储用户数据
特点说明:由多个同心圆组成
存储计数:最外面同心圆为0磁道
工作原理:磁盘默认按照磁道寻找数据
重点原理:磁头径向运动为机械运动(寻道) 性能小于固态硬盘(芯片)
原理特点:磁头机械运动较慢
1.1.1.2.7 扇区(Sector)
作用说明:用来存储用户数据
特点说明:磁盘存储最小单位
存储计数:默认磁盘扇区从1扇区开始,扇区大小为512字节
系统存储最小单位是block
1.1.1.2.8 柱面(Cylinder)
作用说明:用来存储用户数据
特点说明:不同盘面上相同的磁道组成(圆柱体)
工作原理:磁盘默认按照柱面进行读写
重点原理:磁头之间的切换为电子切换
原理特点:磁头电子切换较快
1.1.1.2.9 单元块(Units)
作用说明:用来存储用户数据
特点说明:表示单个柱面大小
1.2 磁盘阵列
磁盘阵列如何配置
配置LVM L 逻辑 v 卷组 M 管理 逻辑卷管理 --> 实现可以随意调整磁盘分区大小
获得更大的容量
获得更高的性能
获得更好的安全性
1.2.1 raid 0
具有最高的存储性能(磁盘容量不浪费,读写很快),这些磁盘的总和
10*1TB raid 0
要制作RAID 0至少要1块物理磁盘,不做raid不能安装系统
安全:任何一块硬盘损坏,所有的数据无法使用,安全性最低
可用容量:所有硬盘容量的和
性能:读写速度最快
使用场景:不要求安全,只要求速度
举例:数据库从库/存储从库
1.2.2 raid 1
镜像:损失50%的数据容量。例如2块1T的盘,做完RAID 1后容量为1T
raid只能2块硬盘
Mirror不能提高存储性能。理论上写性能和单盘相差不大
安全冗余:100%
可用容量:一半(两块硬盘容量之和)
性能:写入速度慢,读取速度OK
使用场景:只追求安全性对于速度没要求
举例:系统盘,监控服务器
1.2.3 raid 5
需要至少3块,损失一块硬盘
6*600G
安全:最多可以损坏一块硬盘
可用容量:损失一块盘的容量
性能:写入速度不快,读取Ok
使用场景:对于数据安全,对于速度要求不高
举例:普遍数据库 ,存储访问量不高
1.2.4 raid 10 成本最高
最少4块硬盘,增加硬盘必须是2的倍数;所有硬盘容量的一半
安全:最多损坏一半硬盘
可用容量:损失所有硬盘一半的容量
性能:写入和读取 都很快
使用场景:对于安全和性能都要
举例:高并发或高访问量 数据库主库 存储
1.3 磁盘分区
情况1:
MBR格式
4个主分区 sda1 sda2 sda3 sda4
情况2:
3个主分区 sda1 ada2 sda3 sda4(扩展分区) 无法直接使用 无法挂载
sda4(200G)
多个逻辑分区
sda5 100G 可以直接使用 可以挂载
sda6 100G 可以直接使用 可以挂载
第1块sas硬盘的第一个主分区
/dev/sda1
第2块sata硬盘的第2个主分区
/dev/sdb2
第3块sata硬盘的第1个逻辑分区
/dev/sdc5
服务器的第一块磁盘使用 sda
第二快磁盘使用 sdb
第一块磁盘的第一个主分区 sda1
第二个主分区 sda2
第一个逻辑分区 sda5
第二快磁盘的第一个主分区 sdb1
第二个主分区 sdb2
第一个逻辑分区 sdb5
1.4 磁盘格式化 fdisk
fdisk 小于2T的磁盘进行分区 MBR
1.4.1 MBR格式 4个主分区
Linux操作系统 RAID
300G 600G 900G
300*2快 RAID1 保护操作系统 600G--> MBR引导
1.4.2 parted 大于2T的磁盘进行分区 GPT
GPT格式 128个主分区
1.5 磁盘分区: fdisk
第一步: 准备一块新的磁盘 100M
虚拟机添加
工作: 物理机 购买新的磁盘
云服务 购买云存储
第二步: 查看确认磁盘已在操作系统中显示 fdisk
云服务新的磁盘 需要重启
物理机新的磁盘 支持热插拔
虚拟机vmware需要重启
第三步: fdisk 分区
[root@oldboyedu-lnb ~]# fdisk /dev/sdb # 对第二快磁盘进行分区 Command (m for help): m # help 帮助 Command action d delete a partition # 删除分区 g create a new empty GPT partition table # 创建GPT分区表 l list known partition types # 显示分区表类型 m print this menu # 打印帮助菜单 n add a new partition # 创建新的分区 p print the partition table # 显示分区表 q quit without saving changes # 退出不保存 t change a partition's system id # 改变分区类型 w write table to disk and exit # 保存并退出 Command (m for help): n Partition type: # 分区类 p primary (0 primary, 0 extended, 4 free) #可用4个主分区 e extended # 扩展分区 Select (default p): # 选择分区表类型 默认 p 主分区 Partition number (1-4, default 1): 选择分区号码默认1 First sector (2048-208895, default 2048): # 开始的扇区 默认 Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +20M #结束的扇区 或者 K M G +20M 第一个分区为20M Partition 1 of type Linux and of size 20 MiB is set 查看当前的分区 Command (m for help): p Disk /dev/sdb: 106 MB, 106954752 bytes, 208896 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: 0x5bcfea06 Device Boot Start End Blocks Id System /dev/sdb1 2048 43007 20480 83 Linux
第四步: 格式化
xfs cenetos7默认的分区表类型
[root@oldboyedu-lnb ~]# mkfs.xfs /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=1, agsize=5120 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=5120, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=855, version=2 =sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
第五步: 挂载使用
[root@oldboyedu-lnb ~]# mount /dev/sdb1 /mnt [root@oldboyedu-lnb ~]# df -h tmpfs 98M 0 98M 0% /run/user/0 /dev/sdb1 17M 1.1M 16M 7% /mnt
第六步: 卸载磁盘
[root@oldboyedu-lnb ~]# umount /mnt
作业练习:
分区 3个主分区+1个扩展分区+2个逻辑分区
磁盘案例
注意:分区的时候,如果分三个主分区,把剩下的所有(默认)给第三个主分区,如果分三个主分区,1个扩展分区,把剩下的所有分给扩展分区. 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): First sector (2048-208895, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +16M Partition 1 of type Linux and of size 16 MiB is set Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): First sector (34816-208895, default 34816): Using default value 34816 Last sector, +sectors or +size{K,M,G} (34816-208895, default 208895): +16M Partition 2 of type Linux and of size 16 MiB is set Command (m for help): n Partition type: p primary (2 primary, 0 extended, 2 free) e extended Select (default p): p Partition number (3,4, default 3): 3 First sector (67584-208895, default 67584): Using default value 67584 Last sector, +sectors or +size{K,M,G} (67584-208895, default 208895): +16M Partition 3 of type Linux and of size 16 MiB is set 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 (100352-208895, default 100352): Using default value 100352 Last sector, +sectors or +size{K,M,G} (100352-208895, default 208895): Using default value 208895 Partition 4 of type Extended and of size 53 MiB is set Command (m for help): n All primary partitions are in use Adding logical partition 5 First sector (102400-208895, default 102400): Using default value 102400 Last sector, +sectors or +size{K,M,G} (102400-208895, default 208895): +16M Partition 5 of type Linux and of size 16 MiB is set Command (m for help): n All primary partitions are in use Adding logical partition 6 First sector (137216-208895, default 137216): Using default value 137216 Last sector, +sectors or +size{K,M,G} (137216-208895, default 208895): +16M Partition 6 of type Linux and of size 16 MiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@oldboyedu-lnb~]# ll /dev/sdb sdb sdb1 sdb2 sdb3 sdb4 sdb5 sdb6
第2章 磁盘分区方式
2.1 开机自动加载方案
2.1.1 写入rc.local
2.1.2 写入/etc/fstab
UUID=d25e7543-..... / xfs defaults 1 1 UUID或者设备名称 挂载点 文件系统 挂载参数 是否备份 开机磁盘检查
2.1.3 查看UUID
lsblk 查看
[root@oldboyedu-lnb~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs 1af0c500-80df-4926-88aa-8e4419a636c9 /boot ├─sda2 swap 35a4f6da-d8f3-4449-83d2-bef70f83bda0 [SWAP] └─sda3 xfs 32c0b660-ac0a-4b5c-b1c9-4f5209eba66a / sdb sr0 iso9660 CentOS 7 x86_64 2018-11-25-23-54-16-00
blkid查看
[root@oldboyedu-lnb~]# /dev/sda1: UUID="1af0c500-80df-4926-88aa-8e4419a636c9" TYPE="xfs" /dev/sda2: UUID="35a4f6da-d8f3-4449-83d2-bef70f83bda0" TYPE="swap" /dev/sda3: UUID="32c0b660-ac0a-4b5c-b1c9-4f5209eba66a" TYPE="xfs" /dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
2.2 磁盘分区fdisk
fdisk适用于小于2TB磁盘 fdisk只支持mbr分区表
开机自动挂载 /etc/fstab 挂载设备的配置文件 /etc/rc.local
[root@oldboyedu-lnb ~]# tail -2 /etc/fstab /dev/sdb1 /mnt xfs defaults 0 0 UUID=fc550328-186c-408f-aa4f-daf78bf04281 /data xfs defaults 0 0
PS: 在使用df -h过程中发现无法正常显示磁盘信息
使用umount -f /data 强制卸载后正常使用
2.3 磁盘分区parted
parted一般用于大于2TB磁盘 gpt支持更大的硬盘且支持更多的分区 不写入内存直接生效 常用参数 主分区可分128个 GPT 格式:parted 命令可以创建全局惟一的标识符分区表 GPT,而 fdisk 和 cfdisk 则仅限于 DOS 分区表。 mktable 创建磁盘分区表 mktable gpt 创建分区为GTP格式 设置分区表为GPT p print 显示磁盘分区信息 mkpart make partition 创建分区 rm 删除分区 q quit 退出 创建分区并查看分区p 提示没有找到分区 说明还没有进行分区 [root@oldboyedu-lnb ~]# parted -l # 查看gpt格式分区信息 [root@oldboyedu-lnb ~]# parted /dev/sdb (parted) mktable gpt (parted) p Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 3221GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags (parted) mkpart primary File system type? [ext2]? xfs # 文件系统 Start? 0 # 开始 End? 1000 # 结束 Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel? I [root@oldboyedu-lnb ~]# parted /dev/sdb GNU Parted 3.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mkpart primary 1000 1500 Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel? I (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 3221GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 1000MB 1000MB primary 2 1000MB 1500MB 500MB primary
2.4 删除主分区
Number Start End Size File system Name Flags 1 17.4kB 1000MB 1000MB primary 2 1000MB 1500MB 500MB primary (parted) rm 2
2.5 非交互式parted分区
[root@oldboyedu-lnb ~]# parted /dev/sdb mkpart primary 1000 2000 [root@oldboyedu-lnb ~]# parted /dev/sdb mkpart primary 2000 2500 Information: You may need to update /etc/fstab. [root@oldboyedu-lnb ~]# parted /dev/sdb print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 3221GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 1000MB 1000MB primary 2 1000MB 2000MB 999MB primary 3 2000MB 2500MB 500MB primary
2.6 非交互式删除
[root@oldboyedu-lnb ~]# parted /dev/sdb rm 2
格式化分区
[root@oldboyedu-lnb ~]# mkfs.xfs /dev/sdb1
下一步挂载使用
[root@oldboyedu-lnb ~]# mount /dev/sdb1 /mnt
2.7 企业场景
磁盘空间不够用
云主机 购买磁盘-->云服务器后台挂载到对应的服务器(在光驱中放入镜像文件)
物理机 直接插新的磁盘 支持热插拔
2.7.1 格式化磁盘
[root@oldboyedu-lnb ~]# mkfs.xfs -f /dev/sdb
2.7.2 挂载使用磁盘
[root@oldboyedu-lnb ~]# mount /dev/sdb /data
2.7.3 查看磁盘挂载
[root@oldboyedu-lnb ~]# df -h /dev/sdb 3.0T 33M 3.0T 1% /data
2.7.4 开机自动挂载 /etc/fstab
/dev/sdb /data xfs defaults 0 0
2.8 磁盘案例
企业案例:java环境内存不够用,占用大量的swap分区
内存满: 导致Linux系统的进程被杀 优先杀占用内存最高的那个服务
两种情况:
一种情况是流量达到了上线 内存8G 实际用到了7.xG 必须升级内存
第二种情况流量没有达到上线 网络波动引起的 某个时间点达到8G左右
程序代码导致内存溢出(用户量没有达到8G值)
swap 磁盘的空间临时充当内存使用 速度较慢
swap分区在安装系统可以划分
在进入操作系统后可以临时扩充
2.9 扩展swap分区大小
/dev/zero 白洞 不断输出内容 /dev/null 黑洞 /dev/urandom 随机字符
2.9.1 第一步: 生成一个200M的文件
dd if=/dev/zero of=/tmp/200m bs=1M count=200 inputfile outfile block size 复制次数 数据来源 输出文件 每次复制多大
2.9.2 第二步: 格式化swap分区
[root@oldboyedu-lnb ~]# mkswap /tmp/200m Setting up swapspace version 1, size = 204796 KiB no label, UUID=6ecfd552-d6f1-4769-b57b-39bb1a33d87d
2.9.3 第三步: 激活 挂载swap分区
[root@oldboyedu-lnb ~]# swapon /tmp/200m swapon: /tmp/200m: insecure permissions 0644, 0600 suggested. You have 5new mail in /var/spool/mail/root [root@oldboyedu-lnb ~]# free -h total used free shared buff/cache available Mem: 974M 97M 527M 13M 349M 698M Swap: 1.2G 0B 1.2G
2.9.4 第四步: 卸载swap分区
[root@oldboyedu-lnb ~]# swapoff /tmp/200m You have new mail in /var/spool/mail/root [root@oldboyedu-lnb ~]# free -h total used free shared buff/cache available Mem: 974M 97M 527M 13M 349M 698M Swap: 1.0G 0B 1.0G
2.9.5 第五步:查看swap的组成
[root@oldboyedu-lnb ~]# swapon -s Filename Type Size Used Priority /dev/sda2 partition 1048572 0 -1 /tmp/200m file 204796 0 -2
2.9.6 第六步: 开机自动挂载
/tmp/200m swap swap defaults 0 0
2.10 磁盘案例2:
1. du –sh 查看某个目录占用空间大小 确认后删除 2. 通过磁盘挂载的方式解决磁盘不够用的情况
2.10.1 第一步: 生成10G的文件
dd if=/dev/zero of=/var/log/10g bs=1M count=10000
2.10.2 第二步: 使用du命令查找该文件
du -h /*|grep G du -h /var/log/*|grep G
2.10.3 使用find查找大文件
[root@oldboyedu-lnb ~]# find / -type f -size +1G /var/log/10g
2.11 通过磁盘挂载的方式解决磁盘不够用的情况
查找到的大文件 有用 增加磁盘的方式解决 源文件的路径不能变
/var/log/10g 持续不断的往文件中输出日志
2.11.1 第一步: 增加一块新的磁盘进行格式化挂载
mkfs.xfs /dev/sdb mount /dev/sdb /data
2.11.2 第二步: 把/var/log/10g 文件移动到/data下 第二快磁盘
2.11.3 第三步: 软链接
[root@oldboyedu-lnb ~]# ln -s /data/10g /var/log/10g
2.12 磁盘案例3: 如何查找小文件多的目录
使用find命令查找目录的大小
2.13 磁盘案例4
文件是否被真的删除
显示 no space left on device ,df –h查看磁盘有剩余
inode和block的数量同时为0 文件没有被进程调用 重启服务生效
2.13.1 第一步: 模式文件被命令占用
2.13.2 第二步: 使用lsof查看被进程调用的文件
安装lsof命令 yum -y install lsof
[root@oldboyedu-lnb ~]# lsof|grep 10g tail 2053 root 3r REG 8,16 10485760000 67 /data/10g
2.13.3 第三步: 在文件被占用的情况下删除10g这个文件
[root@oldboyedu-lnb ~]# rm -f /data/10g [root@oldboyedu-lnb ~]# ll /data/ total 0 [root@oldboyedu-lnb ~]# df -h /dev/sdb 3.0T 9.8G 3.0T 1% /data
2.13.4 第四步: 重启服务生效
httpd 服务---> /var/log/httpd/access.log
删除access.log文件后重启(文件过大但是还是没有解决问题)
systemctl reload|restart httpd 重启生效
[root@oldboyedu-lnb ~]# lsof |grep 10g tail 2053 root 3r REG 8,16 10485760000 67 /data/10g (deleted) [root@oldboyedu-lnb ~]# kill -9 2053