磁盘管理
Posted lbzyyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁盘管理相关的知识,希望对你有一定的参考价值。
目录
1.磁盘层次结构
2.磁盘常见问题
3.调整swap空间大小
1.磁盘层次结构
1.磁盘层次结构--物理结构
磁盘的外部结构(看的见摸得到的结构) |
|||
|
作用 |
补充 |
|
磁盘主轴 |
决定磁盘转速 (rpm-round per minute) |
家用磁盘转速 7200 rpm 5400 rpm |
|
磁盘盘片 |
用于存储数据 |
|
|
磁盘磁头 |
用于读取数据 |
|
|
磁盘接口 |
用于连接主板 用于连接阵列卡 |
|
|
磁盘的内部结构(看不见的结构信息) |
|||
|
作用说明 |
特点说明 |
原理特点 |
磁盘(Disk) |
|
|
|
磁头(Head) |
用来写入和读取数据的 |
盘面数量等于磁头数量 |
采用径向运动读写数据 |
磁道(Track) |
用来存储用户数据 |
由多个同心圆组成, 最外面同心圆为0磁道 |
磁盘默认按照磁道寻找数据,磁头机械运动较慢 重点原理:磁头径向运动为机械运动(寻道) 性能小于固态硬盘(芯片) |
扇区(Sector) |
用来存储用户数据 |
磁盘存储最小单位 默认磁盘扇区从1扇区开始,扇区大小为512字节 |
系统存储最小单位是block |
柱面(Cylinder) |
用来存储用户数据 |
不同盘面上相同的磁道组成(圆柱体) |
磁盘默认按照柱面进行读写,磁头电子切换较快 重点原理:磁头之间的切换为电子切换
|
单元块(Units) |
用来存储用户数据 |
表示单个柱面大小 |
|
2. 磁盘层次结构--磁盘阵列raid
a.阵列有什么作用?
1) 提高磁盘存储效率
2) 提高磁盘存储安全
3) 提高磁盘存储容量
b.阵列的配置方法
raid 0 存储数据效率高 存储安全性低
raid 1 存储数据效率低 存储安全性高
raid 5 存储数据效率较高 存储安全性较高
说明: 至少有3块磁盘 raid5阵列中只能最多坏一块磁盘 损耗一块磁盘的容量
300G 300G 300G --> raid5 --> 600G
LVM 将多块硬盘整合为一块,实现分区可以弹性缩容 和 扩容
3.磁盘层次结构--磁盘分区、格式化和挂载方法
a.预备知识
1) 系统启动引导记录
MBR引导记录 用于引导磁盘空间小于2T
GPT引导记录 用于引导磁盘空间大于2T
分区方式
情况一:
可以划分4个主分区 /dev/sda /dev/sda1 .. sda4
情况二:
可以划分3个主分区 /dev/sda /dev/sda1 .. sda3
可以划分1个扩展分区 扩展分区无法直接使用
需要在扩展分区基础上划分逻辑分区: /dev/sda5 /dev/sda6 ...
b.实际操作
1)情况一: 磁盘分区实践--磁盘小于2T(fdisk最大分的区要小于2T)
//磁盘层次结构--磁盘分区方法(磁盘小于2T) 1.准备磁盘环境 2.识别磁盘 3.分区处理 4.识别分区信息 //磁盘格式化 //磁盘挂载 1./etc/rc.local实现开机自动挂载 2./etc/fstab实现开机自动挂载 1.准备磁盘环境 1)准备了一块新的10G硬盘 2.识别磁盘 [root@lbz01 ~]# ll /dev/sdb //检查是否有新的磁盘存储文件 brw-rw----. 1 root disk 8, 16 Jan 26 21:01 /dev/sdb 3.分区处理 [root@lbz01 ~]# fdisk /dev/sdb ... Command (m for help): m //可以对磁盘进行分区了 Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition //删除分区 g create a new empty GPT partition table //创建一个新的空的GPT分区表(可以对大于2T磁盘进行分区) G create an IRIX (SGI) partition table l list known partition types //列出可以分区的类型 m print this menu //输出帮助菜单 n add a new partition //新建增加一个分区 o create a new empty DOS partition table p print the partition table //输出分区的结果信息 q quit without saving changes //不保存退出 s create a new empty Sun disklabel t change a partition‘s system id //改变分区的系统id==改变分区类型(LVM 增加swap分区大小) u change display/entry units //改变分区的方式 是否按照扇区进行划分 v verify the partition table w write table to disk and exit //将分区的信息写入分区表并退出==保存分区信息并退出 x extra functionality (experts only) 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): 1 First sector (2048-20971519, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +1G Partition 1 of type Linux and of size 1 GiB is set 2)分区操作检查(规划分4个主分区 每个分区1G) Command (m for help): p Disk /dev/sdb: 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: 0x09f5f757 Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux /dev/sdb2 2099200 4196351 1048576 83 Linux /dev/sdb3 4196352 6293503 1048576 83 Linux /dev/sdb4 6293504 8390655 1048576 83 Linux Command (m for help): n If you want to create more than four partitions, you must replace a primary partition with an extended partition first. Command (m for help): d //删除分区 Partition number (1-4, default 4): 1 Partition 1 is deleted Command (m for help): p Disk /dev/sdb: 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: 0x09f5f757 Device Boot Start End Blocks Id System /dev/sdb2 2099200 4196351 1048576 83 Linux /dev/sdb3 4196352 6293503 1048576 83 Linux /dev/sdb4 6293504 8390655 1048576 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 1 First sector (2048-20971519, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-2099199, default 2099199): Using default value 2099199 Partition 1 of type Extended and of size 1 GiB is set 3)分区操作检查(规划分3个主分区 1个扩展分区 每个主分区1G 剩余都给扩展分区) Command (m for help): p Disk /dev/sdb: 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: 0x09f5f757 Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 5 Extended /dev/sdb2 2099200 4196351 1048576 83 Linux /dev/sdb3 4196352 6293503 1048576 83 Linux /dev/sdb4 6293504 8390655 1048576 83 Linux 4)创建逻辑分区 Command (m for help): n All primary partitions are in use Adding logical partition 5 First sector (4096-2099199, default 4096): Using default value 4096 Last sector, +sectors or +size{K,M,G} (4096-2099199, default 2099199): +1G Value out of range. Last sector, +sectors or +size{K,M,G} (4096-2099199, default 2099199): Using default value 2099199 Partition 5 of type Linux and of size 1023 MiB is set Command (m for help): p Disk /dev/sdb: 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: 0x09f5f757 Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 5 Extended //有了扩展分区才能逻辑分区 /dev/sdb2 2099200 4196351 1048576 83 Linux /dev/sdb3 4196352 6293503 1048576 83 Linux /dev/sdb4 6293504 8390655 1048576 83 Linux /dev/sdb5 4096 2099199 1047552 83 Linux Command (m for help): w //保存退出 The partition table has been altered! 5)让系统可以加载识别分区文件 [root@lbz01 ~]# partprobe /dev/sdb //磁盘格式化(创建文件系统: 磁盘分区存储数据的方式) ext3/4 centos6 xfs centos7 格式效率较高 数据存储效率提升(数据库服务器) [root@lbz01 ~]# mkfs.xfs /dev/sdb2 meta-data=/dev/sdb2 isize=512 agcount=4, agsize=65536 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=262144, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 //磁盘挂载 [root@lbz01 ~]# mkdir /mount02 [root@lbz01 ~]# mount /dev/sdb2 /mount02 [root@lbz01 ~]# df -h //检查确认 Filesystem Size Used Avail Use% Mounted on /dev/sda3 49G 1.7G 48G 4% / devtmpfs 981M 0 981M 0% /dev tmpfs 992M 0 992M 0% /dev/shm tmpfs 992M 9.6M 982M 1% /run tmpfs 992M 0 992M 0% /sys/fs/cgroup /dev/sda1 197M 102M 95M 52% /boot tmpfs 199M 0 199M 0% /run/user/0 /dev/sdb2 1014M 33M 982M 4% /mount02 1./etc/rc.local实现开机自动挂载 [root@lbz01 ~]# vi /etc/rc.local #mount 挂载的磁盘文件 挂载点 mount /dev/sdb2 /mount02 [root@lbz01 ~]# tail -1 /etc/rc.local #系统开机加载rc.local流程: 加载/etc/rc.local --> /etc/rc.d/rc.local --> 以绝对路径方式执行 /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local mount /dev/sdb2 /mount02 2./etc/fstab实现开机自动挂载 [root@lbz01 ~]# blkid /dev/sdb2: UUID="b5afd1bc-4aa8-4cfc-9cda-fe3677dc3837" TYPE="xfs" [root@lbz01 ~]# vi /etc/fstab #挂载磁盘文件(存储设备) 挂载点 指定文件系统类型 挂载的参数 是否备份磁盘 是否检查磁盘 UUID="b5afd1bc-4aa8-4cfc-9cda-fe3677dc3837" /mount02 xfs defaults 0 0 "/etc/fstab" 13L, 572C written [root@lbz01 ~]# tail -1 /etc/fstab UUID="b5afd1bc-4aa8-4cfc-9cda-fe3677dc3837" /mount02 xfs defaults 0 0
2)情况二: 磁盘分区实践--磁盘大于2T(parted可以划分一个大于2T的分区)
第一个里程: 准备磁盘环境
虚拟主机中添加一块3T硬盘
第二个里程: 使用parted命令进行分区
parted /dev/sdc
进行查看:help
mklabel,mktable LABEL-TYPE create a new disklabel (partition table) //创建一个分区表 (默认为mbr)
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found
partitions, or a particular partition //显示分区信息
mkpart PART-TYPE [FS-TYPE] START END make a partition //创建一个分区
quit exit program //退出分区状态
rm NUMBER delete partition NUMBER //删除分区
修改磁盘分区类型: mklabel gpt
分区方法: mkpart primary 0 2100G
第三个里程: 加载磁盘分区
partprobe /dev/sdc
第四个里程: 格式化磁盘分区
mkfs.xfs /dev/sdc1
第五个里程: 挂载磁盘分区
mount /dev/sdc1 /mnt
检查确认:df -h
2.磁盘常见问题
磁盘满的情况 No space left on device
1. 存储的数据过多了
模拟磁盘空间不足
dd if=/dev/zero of=/mount02/1000M bs=10M count=100
block存储空间不足了
解决方式:
a 删除没用的数据
b 找出大的没用的数据
第一种方法:find / -type f -size +xxx
第二种方法:du -sh /*|sort -h
补充: 按照数值排序命令
[root@lbz01 ~]# cat num.txt |sort -n
# 1
# 10
# 11
# 12
# 2
# 3
# 6
# 9
[root@lbz01 ~]#cat num.txt |sort -n -k2(对第二列信息排序)
# 1
# 2
# 3
# 6
# 9
# 10
# 11
# 12
2. 存储的数据过多了
inode存储空间不足了: 出现了大量小文件
3.调整swap分区大小
//调整swap分区大小 1.分出空间 2.指定空间 3.加载空间 4.卸载空间 [root@lbz01 ~]# dd if=/dev/zero of=/tmp/1G bs=100M count=10 1.将磁盘分出一部分空间给swap分区使用 10+0 records in 10+0 records out 1048576000 bytes (1.0 GB) copied, 6.11735 s, 171 MB/s [root@lbz01 ~]# mkswap /tmp/1G 2.将指定磁盘空间作为swap空间使用 Setting up swapspace version 1, size = 1023996 KiB no label, UUID=b3c94f82-8bfb-429a-8d61-31292af48ce0 [root@lbz01 ~]# swapon /tmp/1G 3.加载使用swap空间 swapon: /tmp/1G: insecure permissions 0644, 0600 suggested. [root@lbz01 ~]# free -h total used free shared buff/cache available Mem: 1.9G 141M 664M 9.5M 1.1G 1.6G Swap: 2.0G 0B 2.0G [root@lbz01 ~]# swapoff /tmp/1G 4.卸载使用swap空间 You have new mail in /var/spool/mail/root [root@lbz01 ~]# free -h total used free shared buff/cache available Mem: 1.9G 140M 665M 9.5M 1.1G 1.6G Swap: 1.0G 0B 1.0G [root@lbz01 ~]# rm /tmp/1G -f
问题及反思
//出现的问题及反思 1.把挂载信息放在/etc/rc.local后,开机后还是不能自动挂载,挂载信息没有了 [root@lbz01 ~]# ll /etc/rc.d/rc.local //查看原因 [root@lbz01 ~]# chmod +x /etc/rc.d/rc.local //解决办法 [root@lbz01 ~]# reboot [root@lbz01 ~]# df -h //检查确认 2.进入到挂载目录下,然而却不能创建文件 [root@lbz01 ~]# mount -o ro /dev/sdb2 /mount02 //模拟问题 [root@lbz01 ~]# cd /mount02 [root@lbz01 mount02]# touch lbz.txt //出现问题 touch: cannot touch ‘lbz.txt’: Read-only file system [root@lbz01 mount02]# ll -d /mount02 //查看原因 drwxr-xr-x 2 root root 24 Dec 14 17:08 /mount02 [root@lbz01 mount02]#cd //解决问题 [root@lbz01 ~]# umount /mount02 [root@lbz01 ~]# mount -o rw /dev/sdb2 /mount02 [root@lbz01 ~]# cd /mount02 [root@lbz01 mount02]# touch lbz.txt [root@lbz01 mount02]# ll lbz.txt -rw-r--r-- 1 root root 0 Dec 14 17:11 lbz.txt
3.在编辑/etc/fstab时,不小心把dev/sdb2的UUID写成了/dev/sda2的UUID,结果重启后出现了下面的情况
解决问题的办法
编辑/etc/fstab,把UUID改成对应/dev/sdb2的UUID再重启就可以了
版权属于:木丫头
转载必须得声明
以上是关于磁盘管理的主要内容,如果未能解决你的问题,请参考以下文章
Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题