磁盘管理

Posted lbzyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁盘管理相关的知识,希望对你有一定的参考价值。

目录

1.磁盘层次结构

2.磁盘常见问题

3.调整swap空间大小

1.磁盘层次结构

1.磁盘层次结构--物理结构

磁盘的外部结构(看的见摸得到的结构)

 

作用

补充

 

磁盘主轴

决定磁盘转速

(rpm-round per minute)

家用磁盘转速 7200 rpm 5400 rpm
企业磁盘转速 15k rpm 10k 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 partitions 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再重启就可以了

 

版权属于:木丫头

转载必须得声明


以上是关于磁盘管理的主要内容,如果未能解决你的问题,请参考以下文章

massCode 一款优秀的开源代码片段管理器

如何管理在每个 git 版本中添加私有代码片段?

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

如何使用Android片段管理器传递变量[重复]

Android:使用支持片段管理器时复制片段