Linux入门攻坚——7、磁盘管理——文件系统挂载管理及RAID、LVM
已经安装文件系统的分区需要经过挂载才能使用。
一切文件系统的使用都是从根开始,根是文件系统的起始点。
计算机启动过程:加电自检——bootloader——kernel——rootfs——/sbin/init
kernel第一步要加载根系统。
将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其他文件访问入口的行为称之为挂载;
解除此关联关系的过程称之为卸载;
把设备关联挂载点:mount point
mount
卸载时:可使用设备,也可以使用挂载点
umount
注意:挂载点下原有文件在挂载完成后会被临时隐藏;
挂载方法:mount DEVICE MOUNT_POINT
mount :通过查看/etc/mtab文件 显示当前系统已挂载的所有设备
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备
(1)设备文件:例如/dev/sda5
(2)卷标:-L 'LABEL',如 -L 'MYDATA'
(3)UUID:-U 'UUID',例如:-U '6a5d8ae3-5aba-4630-826a-1332dba38771'
(4)伪文件系统名称:proc,sysfs,devtmpfs,configfs
dir:挂载点
事先存在:建议使用空目录:
进程正在使用中的设备无法被卸载
常用命令选项:
-t vsftype:指定要挂载的设备上的文件系统类型;
-r:readonly,只读挂载
-w:read and write,读写挂载
-n:不更新/etc/mtab
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能);
-L 'LABEL':以卷标指定挂载设备
-U UUID:以UUID指定要挂载的设备
-B,--bind:绑定目录到另一个目录上。
查看内核追踪到的已挂载的所有设备:cat /proc/mounts
-o options : 挂载文件系统的选项
async:异步模式 (CoW,Copy on Write,写时拷贝)
sync:同步模式
atime/noatime:更新访问时间/不更新访问时间,包含目录和文件
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载
exec/noexec:是否支持将文件系统上应用程序运行为进程
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:
remount:重新挂载
ro:只读
rw:读写
user/nouser:是否允许普通用户挂载此设备
acl:启用此文件系统上的acl功能
注意:上述选项可多个同时使用,彼此使用逗号分隔;
默认挂载选项:defaults——rw,suid,dev,exec,auto,nouser,and async
卸载命令:
umount DEVICE
umount MOUNT_POINT
当挂载设备忙时(有进程正在访问的设备),无法卸载:
所以,查看内核追踪到的已挂载的所有设备,使用:cat /proc/mounts
以上是Centos6上的实验结果,在Centos7上,-n选项挂载,mount,cat /etc/mtab中都显示挂载结果。
查看正在访问指定文件系统的进程:
fuser -v MOUNT_POINT
终止所有正在访问指定的文件系统的进程:
fuser -km MOUNT_POINT
挂载交换分区:
启用:swapon [OPTION]...[DEVICE]
-a:激活所有的交换分区
-p PRIORITY:指定优先级;
禁用:swapoff [OPTION]... [DEVICE]
内存空间使用状态:
free [OPTION]
-m:以MB为单位
-g:以GB为单位
文件系统空间占用等信息的查看工具:
df:disk free
-h:human-readable
-i:inodes instead of blocks
-P:以POSIX兼容的格式输出;
查看某目录总体空间占用状态
du [OPTION]... /dir:
-h:human-readable
-s:summary
文件挂载的配置文件:/etc/fstab
每行定义一个要挂载的文件系统;
要挂载的设备或伪文件系统、挂载点、 文件系统类型、挂载选项、 转储频率、 自检次序
要挂载的设备或伪文件系统:
设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc,sysfs)
挂载选项:defaults
转储频率:0,不做备份;1,每天转储;2,每隔一天转储;
自检次序:0,不自检;1,首先自检,一般只有rootfs才用1;2,...
文件系统上的其他概念:
Inode:Index Node,索引节点
地址指针:直接指针、间接指针、三级指针
inode bitmap:对位标识每个inode空闲与否的状态信息;
链接连接:
硬链接:不能够对目录进行;不能跨分区进行;指向同一个inode的多个不同路径,创建文件的硬链接即为inode创建新的引用路径,因此会增加其引用计数;
符号链接:可以对目录进行;可以跨分区进行;指向的是另一个文件的路径,其大小为指向的路径字符串的长度,不增加或减少目标文件inode的引用计数。
ln [-sv] SRC DEST
-s:symbolic link
-v:verbose
文件管理操作对文件的影响:
文件删除:
文件复制:
文件移动:
bash脚本编程:用户交互
read [option]...[name ...]
-p 'PROMPT':
-t TIMEOUT:
bash -n /path/to/some_script:检测脚本中的语法错误
bash -x /path/to/some_script :调试(单步)执行
#!/bin/bash
# Version:0.0.1
# Author:zz
# Description: read testing
read -p "Enter a disk special file:" diskfile
[ -z "$diskfile" ] && echo "Fool" && exit 1
if fdisk -l | grep "^Disk $diskfile" &> /dev/null; then
fdisk -l $diskfile
else
echo "Wrong disk special file."
exit 2
fi
RAID:Redundant Arrays of Inexpensive(Independent) Disks,廉价磁盘冗余阵列(独立磁盘冗余阵列)
提高IO能力——多个磁盘并行读写、提高耐用性——磁盘冗余实现;
级别:多块磁盘组织在一起的工作方式有所不同;
RAID实现方式:
外接式磁盘阵列:通过扩展卡提供适配能力
内接式RAID:主板集成RAID控制器
Software RAID:软件实现的RAID
级别:level,0,1,2,3,4,5,6,10,01
RAID0:条带卷,strip;读、写性能提升,无容错能力,最少磁盘数2,可用空间N*min();
RAID1:镜像带,mirror;读性能提升、写性能略有下降,可用空间1*min(),有冗余能力,最少磁盘2;
RAID4:单块盘作为校验盘,性能瓶颈,读写压力大
RAID5:读写性能提升、可用空间(N-1)*min()、有容错能力,1块磁盘,最少磁盘3
RAID6:读写性能提升,可用空间(N-2)*min()、有容错能力,2块磁盘,最少磁盘4
RAID10:读写性能提升,可以空间N*min()/2、有容错能力,每组做多1块,最少磁盘数4
RAID01:
JBOD:Just a Bunch Of Disks,将多块磁盘的空间合并成一个大的连续空间使用
常用级别:RAID0,RAID1,RAID5,RAID10,RAID50,JBOD
实现方式: 硬件实现方式、软件实现方式
Centos6上的软件RAID的实现:
结合内核中的md(multi devices)
mdadm:模式化的工具
命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>
支持的RAID级别:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10
模式:
创建:-C
装配:-A
监控:-F
管理:-f,-r,-a
<raiddevice>:/dev/md#
<component-device>:任意块设备
-C:创建模式
-n # :使用#个块设备来创建此RAID;
-l # :指明要创建的RAID的级别;
-a {yes|no}:自动创建目标RAID设备的设备文件
-c CHUNK_SIZE:指明块大小;
-x #:指明空闲盘的个数;
-D:显示raid的详细信息,mdadm -D /dev/md#
管理模式:
-f:标记指定磁盘为损坏;
-a:添加磁盘;
-r:移除磁盘;
观察md的状态:cat /proc/mdstat
停止md设备:mdadm -S /dev/md#
watch命令:watch -n # 'COMMAND'
-n # :刷新间隔,单位是秒,
如:创建一个10G可用空间的RAID5:
使用/dev/sdb磁盘剩余的空间创建分区
调整类型为fd:Linux raid auto
需要在添加一个分区设备作为空闲磁盘。现在有5,6,7,8四个分区
使用mdadm创建raid5
使用,类似分区,先要安装文件系统,即格式化
将一个磁盘标注为错误:
再坏一块,也可以工作,降级使用:
可以移除坏掉的设备:
设备修复后,添加新设备
使用mdadm /dev/md0 -a /dev/sdb5,提示错误:
先停用:
重新装配
然后再增加
此时:
没有空闲磁盘了,再添加:
LVM2 LVM:Logic Volume Manager,Version:2
dm:device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块;
/dev/dm-#
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vol0-root
/dev/VG_NAME/LV_NAME
/dev/vol0/root
.
使用LVM:
物理卷pv的管理:
1、先创建分区,并调整分区类型为8e:
2、可用的pv命令,pv管理工具
pvs:简要pv信息显示
pvdisplay:显示pv的详细信息
3、创建
pvcreate /dev/DEVICE
4、删除
pvremove /dev/DEVICE
卷组vg的管理
5、vg常用命令:
6、创建vg
vgcreate [-s #[bBsSkKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDe-vicePath...]
此时再看pv:
7、扩展vg
vgextend VG_NAME PV_NAME
8、vg缩减
减少pv设备,减少前,需要将pv上的数据移走,使用pvmove
pvmove PV_NAME
vgreduce VG_NAME PV_NAME...
逻辑卷lv的管理
9、lv的常用命令
10、创建lv
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
创建的lv,有三个路径:/dev/dm-0,实际文件,两个链接路径:/dev/mapper/myvg-mylv和/dev/myvg/mylv
11、使用lv
lv就相当于一个分区,使用前要高级格式化,如格式化成ext4
12、挂载使用
13、扩展逻辑卷
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
虽然命令执行成功,但是看挂载后的空间没有改变,需要扩展文件系统:
resize2fs
14、缩减lv,先缩减文件系统大小(必须先卸载),然后缩减lv
umount /dev/VG_NAME/LV_NAME
e2fsck -f /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
以上是ext系统,其他系统会有不同。
快照:snapshot
创建一个快照卷,保存某一时刻对应卷的快照,即元数据,并同时监控对应卷的数据,如果数据要改变,则在改变前拷贝其到快照卷。
lvcreate -L #[mMgGtT] -p r -s -n SnapshotLogicalVolume OriginalLogicalVolumeName
lvremove:删除逻辑卷
vgremove:删除卷组
pvremove:删除物理卷
光盘设备的挂载:
光盘设备文件:
IDE:/dev/hdc
Sata:/dev/sr0
符号链接文件:
/dev/cdrom
/dev/cdrw
/dev/dvd
/dev/dvdrw
mount -r /dev/cdrom /media/cdrom
dd命令:convert and copy a file
用法:
dd if=/PATH/FROM/SRC of=?PATH/TO/DEST
bs=#:block size ,复制单元大小;
count=#:复制多少个bs;
磁盘拷贝:
dd if=/dev/sda of=/dev/sdb
备份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
dd if=/tmp/mbr.bak of=dev/sda bs=512 count=1
两个特殊设备:
/dev/null:数据黑洞
/dev/zero:吐零机