RAID
raid简介:
raid全称为廉价的磁盘冗余阵列,利用多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供。
raid优点:
提高IO能力:磁盘并行读写。
提高耐用性:磁盘冗余来实现
raid的级别:
将多块磁盘组织在一起的工作方式有所不同
raid的实现方式:
外接式磁盘阵列:通过扩展卡提供适配能力。
内接式raid:主板集成raid控制器,安装os前现在BIOS里面配置。
软raid:通过OS来实现。
raid的实现:
1、 RAID0的实现:
首先为虚拟机增添两个新分区:/dev/sdb1 /dev/sdc1
将两个新分区做成raid0
mdadm -C -l 0 -n 2 /dev/md0 /dev/sd{b,c}1
为/dev/md0创建文件系统
mkfs.xfs /dev/md0
将/dev/md0挂载后就可以正常使用
mount /dev/md0 /mnt
2、 RAID5的实现:
为虚拟机新增四个分区用于实验:/dev/sdb2 /dev/sdc2 /dev/sdd1 /dev/sde1
将这四个分区合并成raid5:
mdadm -C -l 5 -n 3 -x 1 /dev/md1 /dev/sd{b2,c2,d1,e1}
为创建的raid格式化文件系统:
mkfs.xfs /dev/md1
将raid挂载并使用:
mount /dev/md1 /mnt
模拟组成raid5的一块磁盘损坏,测试备用盘能否自动切换。
mdadm /dev/md1 -f /de/sdb2
3、 RAID的相关管理命令:
查看raid状态
mdadm -D /dev/md#
生成配置文件(生成配置文件后,可以将禁用的raid重新启用)
mdadm -D -s >>/etc/mdadm.conf
将磁盘从raid中移除
mdadm /dev/md1 -r /dev/sdb2
将磁盘加入到raid中
mdadm /dev/md1 -a /dev/sdb3
禁用raid
mdadm -S /dev/md1
启用raid
mdadm -A -s /dev/md1
强制启用raid
mdadm -R /dev/md1
删除raid
1、将raid取消挂载: umount /mnt/
2、禁用raid:mdadm -S /dev/md1
3、清除组成raid的相关磁盘的元数据:mdadm --zero-superblock /dev/sdb2
4、删除分区。
RAID相关知识点总结:
软raid的实现通过工具mdadm进行操作。
mdadm的命令语法格式为:mdadm [mode]
mode:
创建:-C
装配:-A
监控:-F
管理:-f,-r,-a
-C:创建模式
-n#:使用#个块设备来创建此RAID
-l#:指明要创建的raid级别
-a{yes|no}:自动创建目标raid设备的设备文件
-c chunk_size:指明块大小。单位为K
-x#:指明空闲盘的数目
-D:显示raid的详细信息
mdadm -D /dev/md#
管理模式:
-f:标记指定的磁盘为损坏状态
-r:从raid中移除指定磁盘
-a:从raid中添加指定磁盘
观察md的状态:cat /proc/mdstat
LVM
lvm简介:
Logical Volune Manager
dm:device mapper:将一个或者多个底层设备组织成一个逻辑设备的模块
设备名:/dev/dm-#
软连接:
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vol0-root
/dev/VG_NAME/LV_NAME
/dev/vol0/root
创建逻辑卷:需要先将磁盘创建为pv,再讲pv组建成vg,然后在vg上创建lv。
创建逻辑卷过程:
1、创建pv,创建pv之前需要先对磁盘进行分区或增加新硬盘。
pvcreate /dev/sdb /dev/sdc
2、将pv组合成vg
vgcreate -s pe_size vg_name /dev/sdb /dev/sdc
3、在vg中创建一个lv
lvcreate -n lv_name -L lv_size vg_name
4、为lv创建文件系统
mkfs.ext4 lv_path
5、将lv挂载后即可使用。
mount lv_path mountpoint
逻辑卷扩容:
1、首先要对lv扩容,如果vg中没有剩余空间,需要先对vg进行扩容。
lvextend -L +size(或者-l +100%FREE) lv_path
2、同步文件系统
resize2fs lv_path (只是用与ext系列文件系统,xfs文件系统需要使用xfs_gowfs /mountpoint)
题外话:如果vg和pv空间不足了怎么办?
创建pv:pvcreate device
将新建的pv加入到vg: vgextend vg_path pvPath
然后在对lv进行扩容。
基于与xfs文件系统的扩容
首先确认vg中有足够空间
扩展lv
lvextend -L +size lv_name
同步文件系统
xfs_growfs lv_path
此时扩展成功,此外,基于xfs的文件系统只能扩充lv容量但是不能缩减lv容量。
** warning:由于ext4和xfs文件系统的扩展容量命令不同,记起来比较麻烦。所以可以统一使用一个命令进行扩展。
lvextend -r -L +size lv_path(只需这一步操作,即可扩展lv容量并自动同步文件系统(ext4和xfs通用))
逻辑卷缩小容量
1、取消lv挂载
umount lv_path mountpoint
2、缩减文件系统
首先进行文件系统检查
e2fsck -f lv_path
然后在缩减文件系统
resize2fs lv_path size(将lv的容量缩减至size大小)
3、缩减lv容量
lvreduce -L size lv_path(将lv的容量缩小至size大小)
4、将lv进行挂载之后就可使用
mount lv_path mountpoint
逻辑卷的迁移:
将pe使用量少的或者pv所在硬盘无法迁移的pv上的pe迁移到别的可以迁移pv上。
pvmove pv_path
从vg中移除无需迁移的pv
vgreeduce pv_path
将lv缩减至合适容量。(方法同上述缩减lv逻辑卷你容量)
检查该逻辑卷或卷组的名称与将要迁移到的主机上的逻辑卷或者卷组的名称师傅冲突,如果冲突,需要修改名字。
vgrename vg_name vg_newname
lvrename lv_name lv_newname
禁用该vg
vgchange -an vg_name
将vg状态设为导出状态
vaexport vg_name
将对应硬盘拔出并插到新的主机上面
将vg设为导入状态
vgimport vg_newname
激活lv
vgchange -ay vg_newname
将该lv挂载后即可正常使用
lvm管理快照:
lvm快照简介:
逻辑卷快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝
对于需要备份或者复制的现有数据临时拷贝以及其他操作来说,快照是最合适的选择。
快照只有在他们和原来的逻辑卷不同时才会消耗空间
再生成快照时会分配给它一定的空间,但是只有在原来的逻辑卷或者快照有所改变时才会使用这些空间
当原来的逻辑卷中内容有所改变时,会将旧的数据复制到快照中
快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
建立快照的卷的大小只需原始逻辑卷的15%~20%就够了,也可以使用lvextend放大快照
使用lvm快照:
为现有逻辑卷创建快照
lvcreate -n lv_snap_name -L size -p r lv_path
挂载快照:
mount -o ro lv_snap_path mountpoint
恢复快照:
先取消挂载
umount lv_snap_mountpoint
umount lv_mountpoint
将快照合并到对应逻辑卷中
lvconvert –merge lv_snap_path(执行此操作后快照会自动删除)
手动删除快照
取消快照挂载
umount lv_snap_mountpoint
删除快照
lvremove lv_snap_path
warning: centos7创建快照后,挂载时需要加–nouuid选项,因为快照和源逻辑卷的uuid是同一个,而xfs文件系统默认不能同时挂载相同uuid的分区。
磁盘存储和文件系统:
磁盘分区:
分区方式:
MBR,GPT
MBR分区方式要求分区不能超过两个G,硬盘也不能超过两个G,最多4个主分区,3个主分区和一个扩展分区,扩展分区内可以创建多个逻辑分区。
MBR分区结构:
硬盘主引导记录MBR由4个部分组成
主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序
出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节
分区表(DPT,Disk Partation Table)含4个分区项,偏移地址01BEH–01FDH,每个分区表项长16个字节,共64个字节为分区项1、2、3、4。
结束标志字,偏移地址01FE–01FF的连那个歌字节值为结束标志55AA
GPT分区结构:
支持128个分区,使用64位,支持8Z(512Byte/block) 64Z(4096Byte/block)
使用128位UUID表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI(统一扩展固件接口)硬件支持GPT,使操作系用启动
分区管理
列出块设备:
lsblk
创建分区:
fdisk DEVICE 创建MBR分区
gdisk DEVICE 创建GPT分区
parted 高级分区操作
重新设置内存中的内核分区表版本
partprobe(将硬盘分区工具同步到内核)
parted命令:
parted命令的操作都是实时生效的,小心使用。
用法:parted [选项]… [设备[命令[参数]…]…]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默认M)
parted /dev/sdb rm 1
parted -l 列出分区信息
分区工具fdisk和gdisk
gdisk /dev/sdb 类fdisk的GPT分区工具
fdisk -l [-u] [device…] 查看分区
fdisk /dev/sdb 管理分区
子命令
p 分区列表
t 更改分区类型
n 创建新分区
d 删除已经创建的分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存退出
同步分区表
查看内核是否已经识别新的分区
cat /proc/partations
centos6 通知内核重新读取硬盘分区表
新增分区用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f:force
删除分区用
partx -d –nr M-N /dev/DEVICE
centos5, 7 用partprobe
partprobe [/dev/DEVICE]
文件系统:
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从操作系统来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入文件进行保护和检索的系统。
具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩加密等
查看系统支持的文件系统,
/lib/modules/uname -r
/kernel/fs
创建文件系统:
mkfs.FS_TYPE /dev/DEVICE -L 'LABEL' (创建文件系统并设定卷标为LABEL)
创建ext系列文件系统专用工具:
mke2fs:
-t {ext2|ext3|ext4} 指定文件系统类型
-b {1024|2048|4096} 指定块大小
-L 'LABEL' 设置卷标
-j 相当于-t 恶ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i num 为数据空间中没多少字节创建一个inode;不应该小于block大小
-N num 指定分区中创建多少个inode
-l 一个inode记录占用的磁盘空间大小,128--4096
-m num 默认5%,为管理人员预留的空间占总空间的百分比
-O FEATURE[,...] 启用指定特性
-O ^FEATURE 关闭指定特性
文件系统标签:
指向设备的另一种方法
与设备无关
blkid:块设备属性信息查看
blkid [option] [DEVICE]
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设备
e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
findfs:查找分区
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
turn2fs:重新设定ext系列文件系统可调整参数的值
-l 查看指定文件系统的超级快信息;super block
-L 'label' 修改卷标
-m num 修改预留给管理员的空间百分比
-j 将ext2文件系统升级为ext3
-O 文件系统属性启用或禁用,-O ^has_journal
-o 调整文件系统的默认挂载选项 -o ^acl
-U UUID 修改UUID号
dump2fs:快分组管理,32768块
-h:查看超级块信息,不显示分组信息
文件系统的检测和修复:
常发生于司机或者非正常关机之后
挂载为文件系统标记为"no clean"
注意:
一定不要在挂载状态下修复
fsck:File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-p 自动修复错误
-r:交互式修复错误
FS_TYPE:一定要与分区上已经存在文件类型相同
e2fsck:ext系列文件系统专用的检测修复工具
-y 自动回答yes
-f 强制修复
挂载mount:
挂载:将额外文件系统与跟文件系统某现存目录建立起关联联系,进而使得此目录作为其他文件访问该文件系统的入口的行为。
挂载意味着使外来的文件系统看起来如同是主目录树的一部分
访问前,介质必须被挂载
摘除时,介质必须被卸载
按照默认设置,非根用户只能挂载某些设备(光盘,DVD,软盘,USB等等)
挂载点通常在/media或/mnt下
卸载:解除此关联关系的过程
把设备关联挂载点:mount Point
mount
卸载时:可使用设备,也可以使用挂载点
umount
挂载点下原有文件在挂载完成后会被临时隐藏
挂载点目录一般为空
挂载方法:
mount DEVICE MOUNT_POINT
mount命令:
通过查看/etc/fstab文件显示当前已经挂载的所有设备
查看内核追踪到的已挂载的所有设备
cat /proc/mounts
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备
1、设备文件:例如/dev/sda1
2、卷标:-L 'LABEL',例如:-L 'MYDATA'
3、UUID,-U 'UUID':例如:-U 'UUID'
4、伪文件系统名称:proc sysfs devtmpfs configfs
dir:挂载点
事先存在,建议使用空目录
进程正在使用中的设备无法被卸载
mount常用命令选项:
-t vfstype:指定要挂载的设备上文件系统类型
-r:readonly,只读挂载
-w:read and write,读写挂载
-n:不更新/etc/mtab,mount不可见
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中由auto功能)
-L 'LABEL':以卷标指定挂载设备
-U 'UUID':以UUID指定要挂载的设备
-B,--bind:绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async 异步模式 sync 同步模式,内存更改时,同时写磁盘
atime/noatime 包含目录和文件
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持自动挂载,是否支持-a选项
exec/noexec 是否支持在此文件系统上运行程序
dev/nodev 是否支持在此文件系统上使用设备文件
suid/nosuid 是否支持suid和sgid权限
remount 重新挂在
ro 只读 rw 读写
user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
acl 启用此文件系统上的acl功能
loop 使用loop设备
default:相当于rw suid dev exec auto nouser async
卸载命令:
查看挂载情况:
findmnt MOUNT_POINT|device
查看正在访问指定文件系统的进程:
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有正在访问指定的文件系统的进程
fuser -km MOUNT_POINT
卸载:
umount DEVICE
umount MOUNT_POINT
挂载点和/etc/fstab
配置文件系统体系
被mount、fsck和其他程序使用
系统重启时保留文件系统体系
可以在设备栏使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统
/etc/fstab每行定义一个要挂载的文件系统:
1、要挂载的设备或伪文件系统
LABEL:LABEL=""
UUID:UUID=""
伪文件系统名称:proc sysfs
2、挂载点
3、文件系统类型:
ext4,xfs,nfs,none
4、挂载选项:
defaults acl bind
5、转储频率:
0:不做备份
1:每天转储
2:每隔一天转储
6、fsck检查的文件系统的顺序:允许的数字是0,1,2
0:不自检
1:首先自检;一般只有rootfs才用
2:非rootfs使用
处理交换文件和分区:
交换分区是系统RAM的补充
基本设置包括:
创建交换分区或者文件
使用mkswap写入特殊签名
在/etc/fstab文件中添加适当的条目
使用swapon -a 激活交换空间
挂载交换分区:
启用:swapon
swapon [OPTION]... [DEVICE]
-a:激活所有的交换分区
-p PRIORITY:指定优先级
/etc/fstab:pri=value
禁用:swapoff
swapoff [OPTION]... [DEVICE]
swap的优先级:
可以指定swap分区0到32767的优先级,值越大优先级越高。
如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的额swap,会给这个优先级减1.
先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
性能优化:分布存放,高性能磁盘存放
使用光盘:
在图形环境下自动挂载:
/run/media/<user>/<label>
否则就必须被手工挂载
mount /dev/cdrom /mnt
eject命令卸载或弹出磁盘
创建ISO文件:
cp /dev/cdrom /root/centos7.iso
mkisofs -r -o /root/etc.iso /etc
刻录光盘:
wodim -v -eject centos.iso
挂载USB介质:
查看USB介质
lsusb
被内核探测为SCSI设备:
/dev/sdaX,/dev/sdbX,或类似的设备文件
在图形环境中自动挂载
图标在[计算机]窗口中创建
挂载在/run/media/<user>/<label>
手动挂载:
mount /dev/sdb1 /mnt
常见工具:
df [OPTION]... [FILE]... 文件系统空间占用等信息的查看工具
-H 以1000位单位
-T 文件系统类型
-h human-readable人类可读
-i inode instead of blocks显示inode节点使用情况
-P 以Posix兼容的格式输出
du [OPTION]... DIR 查看某目录总体空间占用状态
-h human-readable 人类可读
-s summary --mex-depth 显示总空间占用情况
dd命令:convert and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
bs:bloack size,复制单元大小
count:复制多少个bs
of=file 写到所命名的文件而不是到标准输出
if=file 从所命名的文件读取而不是从标准输入
bs=size 指定块大小(既是ibs也是obs)
ibs=size 一次读size个byte
obs=size 一次写size个byte
cbs=size 一次转化size个byte
skip=blocks 从开头忽略blocks个ibs大小的块
seek=blocks 从开头忽略blocks个obs大小的块
count=n 只拷贝n个记录
conv=conversion[,conversion...] 用指定的参数转换文件
转换参数:
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
Fdatasync 写完成前,物理写入输出文件
备份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的bootloader
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
备份磁盘:
dd if=/dev/sdX of=/dev/sdy 将本地的/dev/sdX整盘备份到/dev/sdy
dd if=/dev/sdx of=/path/to/image 将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx|gzip > /path/to/image.gz 备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
恢复:
dd if=/path/to/image of=/dev/sdx 将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx 将压缩的备份文件恢复到指定盘
拷贝内存资料到硬盘:
dd if=/dev/mem of=/root/mem.bin bs=1024 将内存中数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,
/dev/sda1将无法挂载,创建和拷贝操作无法执行
得到最恰当的block size:
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000
dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size大小
测试硬盘写速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
测试硬盘读速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
修复硬盘
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读
到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一
个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且这个
过程是安全高效的