Linux运维笔记[9]-磁盘管理
RAID简介
[https://zhuanlan.zhihu.com/p/356299159]
[https://www.cnblogs.com/qi-yuan/p/11735525.html]
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意(其中一块盘坏了,数据不丢失)。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID卡)或软件(MDADM)形式组合成一个容量巨大的磁盘组,利用多个磁盘组合在一起,提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。 磁盘阵列还能利用同位检查(Parity Check)的观念,在阵列中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中(也就是坏了一块盘,拔掉,插入新盘,数据还能恢复到新盘,利用奇偶校验)
RAID的创建有两种方式:软RAID(通过操作系统软件来实现)和硬RAID(使用硬件阵列卡)
常用RAID类型:
- RAID0
- RAID1
RAID1(mirroring(镜像卷)),需要磁盘两块以上,
原理:是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件(同步)
- RAID5
RAID 5是RAID 0和RAID 1的折中方案。RAID 5具有和RAID0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID5的磁盘空间利用率要比RAID 1高,存储成本相对较低,是目前运用较多的一种解决方案。RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就是说有相当于一块磁盘容量的空间用于存储奇偶校验信息。因此当RAID5的一个磁盘发生损坏后,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID还会自动利用剩下奇偶校验信息去重建此磁盘上的数据,来保持RAID5的高可靠性。
做RAID 5阵列所有磁盘容量必须一样大,当容量不同时,会以最小的容量为准。 最好硬盘转速一样,否则会影响性能,而且可用空间=磁盘数n-1,Raid 5 没有独立的奇偶校验盘,所有校验信息分散放在所有磁盘上, 只占用一个磁盘的容量。
- RAID6
- RAID10
- RAID50
欧拉OpenEuler配置RAID5
新建RAID5
打开COCKPIT网页管理页面:[192.168.50.239:9090]
新建RAID:
然后等待完成:
图形化界面突然崩了:在此系统中, "storaged" API 不可用.
★★命令行方式:
[https://blog.51cto.com/songxj/285185]
#查看命令帮助
man mdadm
#查看RAID状态
cat /proc/mdstat
#每隔十秒刷新状态
watch -n 10 'cat /proc/mdstat'
仍然在创建RAID,速度非常慢...
#监控RAID并发送消息给系统管理员
nohup mdadm --monitor --mail=root@localhost --delay=300 /dev/md126
删除RAID
[https://blog.51cto.com/u_11867302/1933308]
RAID创建速度太慢了...
#查看RAID状态
mdadm --detail /dev/md126
#删除RAID
[https://www.yisu.com/zixun/549189.html]
[https://blog.51cto.com/linushai/1093300]
mdadm /dev/md126 --fail /dev/sde --remove /dev/sde
mdadm /dev/md/RAID_HDD_A1B1A2B2 --fail /dev/sdc --remove /dev/sdc
mdadm /dev/md/RAID_HDD_A1B1A2B2 --fail /dev/sdg --remove /dev/sdg
mdadm /dev/md/RAID_HDD_A1B1A2B2 --fail /dev/sdb --remove /dev/sdb
mdadm --stop /dev/md/RAID_HDD_A1B1A2B2
mdadm --remove /dev/md/RAID_HDD_A1B1A2B2
cat /dev/null > /etc/mdadm.conf
vim /etc/fstab
#删除/dev/mdxxx 这一行
df -lh
#删除元数据(重要)
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdg
mdadm --misc --zero-superblock /dev/sde
mdadm --misc --zero-superblock /dev/sdb
#如果上个命令失败😭,可以用dd全盘写0
nohup dd if=/dev/zero of=/dev/sdc conv=noerror,sync bs=4k &
nohup dd if=/dev/zero of=/dev/sde conv=noerror,sync bs=4k &
nohup dd if=/dev/zero of=/dev/sdd conv=noerror,sync bs=4k &
nohup dd if=/dev/zero of=/dev/sdg conv=noerror,sync bs=4k &
#查看磁盘元数据
hexdump /dev/sdc --length 4096
LVM简介
[https://www.cnblogs.com/zihanxing/articles/6292201.html]
LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存在。
一个或多个物理卷可以用来创建卷组(VG)。然后基于卷组可以创建逻辑卷(LV)。只要在卷组中有可用空间,就可以随心所欲的创建逻辑卷。文件系统就是在逻辑卷上创建的,然后可以在操作系统挂载和访问。
创建物理卷PV
pvcreate /dev/sda
pvcreate /dev/sdb
pvcreate /dev/sdf
pvcreate /dev/sdh
pvdisplay
创建卷组
vgcreate volume-group1 /dev/sda /dev/sdb /dev/sdf /dev/sdh
vgdisplay
创建逻辑卷
lvcreate -L 58.21T -n 0 volume-group1
lvdisplay
格式化磁盘为ext4
mkfs.ext4 /dev/volume-group1/0
挂载磁盘
mkdir /lvm-group1
mount /dev/volume-group1/0 /lvm-group1
#查看UUID
blkid
#设置开机自动挂载
echo '/dev/volume-group1/0 /lvm-group1 ext4 defaults 1 1' >> /etc/fstab
磁盘只读处理
[https://blog.51cto.com/hi289/1764624]
#查看磁盘挂载状态
mount
#查看磁盘进程占用
fuser -m /lvm-group2
#结束占用(kill)
fuser -mk /lvm-group2
#重新以读写挂载
mount -o rw,remount /lvm-group2
修复磁盘错误
[https://zhuanlan.zhihu.com/p/510854524]
df -h
#获取上次磁盘扫描时间
tune2fs -l /dev/mapper/volume--group2-0 | grep checked
#Last checked: Tue Jan 10 17:35:36 2023
#卸载分区
umount /lvm-group2
#检查ext4分区
fsck.ext4 /dev/mapper/volume--group2-0
#重新挂载
mount -a
附录
RAID初始化慢
[https://www.cnblogs.com/pipci/p/13216185.html]
在创建一个RAID系统时,RAID Group中的磁盘可能是新盘,也可能是一块已经被使用过的数据盘,这些盘上的数据不会全是零。在这种情况下,采用这些盘构建的数据条带一定不能满足数据一致性的需求。即每个条带中的数据按照一定规则计算得到的编码数据和条带中的编码数据是不相符的。这种数据不一致的条带将会对RAID数据正确性问题引入极大的风险。
正因为这个原因,在创建一个RAID的时候需要考虑将系统中所有的条带进行初始化,以此来保证条带中数据的一致性。条带初始化通常可以采用两种方式来解决:
- 通过全盘写零的方式初始化RAID系统中的所有的条带。数据全零的条带,其校验数据也为零。因此,全零数据可以保证条带的一致性。
- 将所有条带进行校验计算,更新条带中的校验数据,以此达到条带数据的一致性。
FTL
映射逻辑Block地址和物理Block地址
owncloud添加磁盘
mkdir -p /lvm-group1/server/sqlite
chmod 777 /lvm-group1/server/sqlite
docker run --name owncloud -p 89:80 -v /lvm-group1/server/sqlite:/var/www/html/data --restart=always -d owncloud
访问192.168.50.239:89设置账号密码
然后在另一个owncloud服务器192.168.50.80:89连接上这个服务器: