简介
硬件上的存储设备目前有两类,通过磁头读写信息的机械硬盘和用主控芯片将信息写入晶体管的固态硬盘,硬盘调度算法等知识可以通过前面的操作系统设备管理文章学习,本章只介绍Linux中能对存储设备的操作。
为了让操作系统识别和管理物理磁盘上的不同分区,需要在设备前加上一些信息来记录硬盘的分区情况,这些信息称为分区表,目前分区表有MBR和GPT两种格式:
MBR
管理的硬盘大小不能超过2T
有主分区和扩展分区两种,不管是哪种分区,总数不能超过4个分区
扩展分区内部可以逻辑上划分多个区域,但是在分区表中都算在一个分区内
如果作为系统盘,必须要设置一个激活分区,用于存放系统的引导文件
GPT
管理硬盘大小不能超过18EB,目前人类还没制造出单块这么大的硬盘
理论上支持无限分区,在win10系统上,最多可以分128个分区
如果作为系统盘,必须要创建一个EFI分区,用于存放系统的引导文件建议ESP分区512M,对齐8扇区4096字节
Linux存储结构
前面的小思考中了解了Linux系统中是一个/
根目录下存放所有其他文件,普通用户存在home
文件夹下,超级管理员使用root
文件夹,其他的文件都是干啥的呢?现在详细展示如下:
/boot 开机所需文件---内核、开机菜单以及所需配置文件等
/dev 以文件形式存放任何设备与接口
/etc 配置文件
/home 用户家目录
/bin 存放单用户模式下还可以操作的命令
/lib 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数
/sbin 开机过程中需要的命令
/media 用于挂载设备文件的目录
/opt 放置第三方的软件
/root 系统管理员的家目录
/srv 一些网络服务的数据文件目录
/tmp 任何人均可使用的"共享"临时目录
/proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
/usr/local 用户自行安装的软件
/usr/sbin Linux系统开机时不会使用到的软件/命令/脚本
/usr/share 帮助与说明文件,也可放置共享文件
/var 主要存放经常变化的文件,如日志
/lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里
设备文件dev中存储如下:
IDE设备 /dev/hd[a-d]
SCSI/SATA/U盘 /dev/sd[a-p]
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光驱 /dev/cdrom
鼠标 /dev/mouse
磁带机 /dev/st0或/dev/ht0
分区管理
Linux系统中使用lsblk
命令查看磁盘信息,Linux用sd[a-z]
给物理盘命名,分区用物理盘名加序号的形式命名,如sda1
,为了后续实验,提前添加了4块10G硬盘,示例如图:
建立分区
fdisk管理MBR分区
fdisk 选项 磁盘
方式管理,具体选项如下:
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区信息
w 保存并退出
q 不保存直接退出
gdisk管理GPT分区与fdisk类似。
parted高级分区操作
该操作实时生效,使用需小心注意,使用方法为parted 选项 设备 命令 参数
,一些命令示例如下:
parted /dev/sda print # 查看分区情况
parted /dev/sdb mklabel msdos # 用于声明磁盘分区类型,标签类型为MBR,可修改为GPT,修改后磁盘原有数据全部丢失
parted /dev/sdb mkpart primary 起点 终点 # 创建磁盘分区,设定起点终点
parted /dev/sdb rm 逻辑盘号 # 删除磁盘
上述过程与Windows系统的磁盘新建卷类似,只是在Linux中使用命令行逐步完成。
建立文件系统
此步骤对应Windows中的格式化操作,使用mkfs
工具完成,给划分好的分区建立文件系统,使用格式为mkfs.ext4 盘符
给磁盘设置ext4文件系统,该文件系统是Linux中的主流系统,Windows中则是NTFS。
系统挂载
将格式化好的磁盘挂载到系统中,此步骤对应Windows中的分盘操作,使用mount
工具完成,格式为mount 磁盘 挂载目录
,使用这种方法只是临时挂载,重启时挂载失效,在/etc/fstab
中写入才是永久挂载,加入字段为磁盘 挂载目录 文件系统 权限默认为defualt 是否备份默认为0 是否自检默认为0
,文件展示如下:
未设置挂载目录的文件,默认占用/
磁盘工具,且如果磁盘更换后,目录中的内容也更换,我们查看的文件内容,实质是磁盘内容。
取消挂载使用unmount 设备名
实现。
查看文件系统信息
df
操作显示文件系统的磁盘使用情况,可加参数-T
显示文件系统类型,-h
以人类可读的格式显示磁盘空间,使用K、M、G等单位。
du
查看某个目录下文件数据的占用率,可加参数-s
查看整个目录,-h
以人可读形式输出。
交换分区
内存会将暂时不用的数据放入硬盘,操作系统中学到这是内存扩展的方式,用于接收内存转出数据的硬盘为交换分区,大小一般设置为物理内存的1.5到2倍,使用mkswap 磁盘
设置交换分区,再使用swpon 磁盘
添加交换分区。
可以通过free
命令查看内存信息,其中包含交换分区的信息,展示如下:
命令行中设置同样是临时的,如果要永久设置需要在/etc/fstab
文件中写入,此时只需将挂载目录和文件系统全部设置为swap
即可,示例/dev/sdb2 swap swap defaults 0 0
。
磁盘容量配额
Linux是多用户的操作系统,可以通过该方法限制用户使用的空间。
使用该方法可能导致冲突,所以需要关闭SELinux服务etenforce 0
,为确保文件系统支持,此时使用getenforce
查看,如果输出为Permissive
说明关闭成功,还需要先检查挂载点是否支持配额mount | grep 挂载点
,再重新挂载硬盘mount -o remount,usrquota,grpquota 挂载点
,使之支持quota
。
使用yum install -y quota
安装配额服务,首先使用quotacheck -avug
扫描硬盘,选项解释如下:
-a:扫描所有在/etc/mtab内含有quota参数的文件系统
-u:针对用户扫描文件与目录的使用情况,会新建一个aquota.user文件
-g:针对用户组扫描文件与目录的使用情况,会新增一个aquota.group文件
-v:显示扫描过程的信息
然后使用quotaon -avug
开启quota
服务,此后就可以开始编辑配额,使用edquota -u user1
即可,对用户的限制规则可以使用edquota -p user1 -u user2
进行复制,设置完成后可以使用repquota -as
查看限制情况。
软限制指用户超出限额原有内容仍可使用,硬限制指用户超出限额后立即停止。
链接文件
Linux中有软硬两种链接方式,文件存储由指向文件的指针inode
号和真实存储block
组成
软链接指仅包含文件路径的方式,与Windows系统中的快捷方式一致
硬链接是指向原始文件inode
的指针,是文件的本质,当文件删除或移动后仍然能找到文件,但不可跨分区链接。
创建链接文件使用ln -s 源文件 链接文件
命令,参数-s
表示软连接文件,缺省默认为硬链接。
磁盘阵列RAID
Linux系统存储多为企业使用,为了维护企业数据安全稳定,多数企业会选择使用磁盘阵列,用冗余来确保安全性,一定程度也可提高效率,磁盘阵列主要有以下几种:
RAID 0 数据条带,将数据分别存在多个盘中,可以提高读写效率,但不能保证安全性
RAID 1 数据镜像,数据存在多个硬盘中,主要目的是保护数据,一个盘挂了还有备份
RAID 5 最少三块盘组成,分开存放数据,一块盘挂了可以通过奇偶校验的方法恢复
RAID 10 先做镜像再数据条带,最少4块盘组成阵列,也可以01即先做阵列再做条带
部署磁盘阵列
使用mdadm
工具实现,其常用选项如下:
-a 检测设备名称
-n 指定设备数量
-l 指定RAID级别
-C 创建
-v 显示过程
-f 模拟设备损坏
-r 移除设备
-Q 查看摘要信息
-D 查看详细信息
-S 停止RAID磁盘阵列
-x 备份盘数量
部署首先安装服务yum -y install mdadm
,再使用mdadm -Cv 新盘名 -a yes -n 数量 -l 阵列级别10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
部署磁盘阵列,再将磁盘格式化,挂载到目录中,使用mdadm -D 新盘名
可查看详细信息,若要永久生效,同样需要将信息写入到fstab
文件中,可使用echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
实现。
可以看到新部署的磁盘容量为20G,而本章开始我们设置了四块容量为10G的磁盘,这是因为部署了10阵列,做了镜像冗余,磁盘容量少了一半。读写测试如下:
dd
命令可从标准输入中读写数据,zero
文件中可取出无限的数据,
关闭阵列
unmount 磁盘 挂载文件
取消挂载
mdadm -S 磁盘
停止阵列服务
mdadm --zero-superblock /dev/sd[b-e]
清除阵列超级快信息,否则开机自动重做阵列
vim /etc/fstab
修改文件,取消开机自动挂载
修复损坏阵列
使用mdadm -D 阵列名
查看阵列状态,找到损坏的磁盘后卸载挂载,遇到设备忙时可以查看占用磁盘的进程,强制杀死后再卸载。
然后使用mdadm /dev/md0 -r /dev/sdb
移除磁盘,再使用mdadm /dev/md0 -a /dev/sdb
加上新的磁盘即可。
备份盘
为了进一步增加阵列健壮性,我们可以设置一块备份盘,当挂了一块盘后备份盘自动补上,通过如下命令设置, mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
其中-x 1
表示有一块备份盘,之后正常挂载使用即可,当一块盘挂了后,就会有备份盘接替。
LVM逻辑卷管理器
物理盘的大小在建立分区后确定,以后不易扩容调整,逻辑卷管理LVM
是在硬盘和文件系统间加了逻辑层,从而提供了逻辑上管理磁盘的方法。
LVM构成
LVM又下至上分别由物理卷PV
,卷组VG
,逻辑卷LV
,最小存储单元PE
构成,
其中,卷组由多个物理卷构成,可以往其中添加物理卷,卷组通过物理卷组合最小存储单元,再形成逻辑卷从卷组中分离出来供挂载使用。
部署逻辑卷
pvcreate 物理盘路径
声明逻辑卷的物理卷
vgcreate 卷组名 物理盘路径
创造卷组
vgdisplay 卷组名
查看卷的信息
lvcreate -n 逻辑卷名 -l 基本单元个数/-L 指定大小 卷组名
划分卷组形成逻辑卷,通常最小存储单元为4M
lvdispaly 逻辑卷名
查看信息
mkfs.ext4 逻辑卷路径
格式化
mount 逻辑卷路径 挂载目的
挂载
扩容逻辑卷
umount 挂载点
取消挂载
lvextend -L 新容量 逻辑卷名
扩容逻辑卷
e2fsck -f 逻辑卷名
检查硬盘完整性,告知系统更新信息
resize2fs 逻辑卷名
重置硬盘容量
mount 逻辑卷名 挂载点
重新挂载
df -h
查看挂载状态
缩小逻辑卷
在真正的生产活动中很少使用,因为该操作易损坏数据,而硬盘价格远远小于内部存储的信息,故一般没有公司会缩小磁盘,但在学习中还是都要了解。
取消挂载
检查完整性
resize2fs 逻辑卷名 新容量
重置容量
lvreduce -L 新容量 逻辑卷名
减小容量
重新挂载逻辑卷
逻辑卷快照
类似虚拟机快照,以后磁盘内容被修改时可使用快照进行恢复,但逻辑卷快照仅可使用一次,执行还原操作后立即自动删除,且要求快照卷的容量必须等于逻辑卷的容量。
使用-s
参数生成快照卷,使用-L
参数指定切割大小,使用lvcreate -L 容量-s -n 快照名 逻辑卷路径
创建快照卷,还原使用lvconvert --merge 快照卷路径
,执行后快照自动删除,若修改的文件大于快照大小,则恢复不会成功。
删除逻辑卷
逻辑卷自下而上建立,故删除需要自上而下执行,即从LV
向PV
删除,具体步骤如下:
umount 挂载点
取消挂载
vi /etc/fstab
删除配置文件中永久生效的配置参数
lvremove 逻辑卷路径
删除逻辑卷
vgremove 卷组名
删除卷组,只需卷组名即可
pvremove 物理卷路径
删除物理卷
总结
本章学习了Linux系统中管理磁盘存储的方法,具体分为分区管理,设置磁盘配额,部署磁盘阵列和使用逻辑卷管理器,具体解释过程为:
分区管理使用parted
工具声明磁盘分区类型,进行大小划分,再建立文件系统,主要是ext4
,最后挂载到想要的文件夹上即可使用,对应与Windows系统新增磁盘的步骤基本类似。
设置磁盘配额使用quota
工具,关闭安全服务并开启自身服务后,使用edquota -u user1
管理用户限额即可。
磁盘阵列是使用冗余磁盘保证读写效率或安全性的方法,具体由条带、镜像、奇偶校验或其组合的形式,使用mdadm -Cv 新盘名 -a yes -n 数量 -l 阵列级别10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
实现。
逻辑卷管理器是借助文件和物理磁盘的中间层实现对硬盘容量动态修改的方法,分别对物理卷PV、卷组LG和逻辑卷LV进行创建和管理的方法实现,扩展和缩小只需使用lvextend
或lvreduce
即可。
Linux系统中好像没有回收站机制,且系统文件保护并不严密,使用命令又不很直观,使用务必小心。