Linux磁盘管理
I/O Ports:I/O设备地址
块设备:block 存取单位“块”,磁盘
字符设备:char,存取单位“字符”,键盘
设备文件:用来关联至一个设备的驱动程序,进而能够跟与之对应硬件设备进行通信;
设备号码:
主设备号:major number, 标识设备类型
次设备号:minmor number,标识同一类型下的不同设备
硬盘接口类型:
并行:
IDE:133MB/s
SCSI:648MB/s
串口:
SATA:6Gb
SAS:6Gb
SSD:480MB/s
/dev/DEV_FILE
磁盘设备的设备文件命名:
IDE:/dev/hd
SCSI,SATA,SAS,USB:/dev/sd[a-z]
分区管理工具:fdisk
fdisk:对于一块硬盘来讲,最多只能管理15个分区
fdisk device
子命令:管理功能
p:print,显示已有分区
n:创建
d:删除
w:写入磁盘并退出
q:放弃更新并退出
m:获取帮助
l:列表所分区id
t:调整分区id
查看内核是否已经识别新的分区:
# cat /proc/partations
通知内核重新读取硬盘分区表:
partx -a /dev/DEVICE
-n M:N(分区编号)
Linux文件系统管理:
Linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
swap:交换分区
光盘:iso9660
Windows:fat32,ntfs
Unix:FFS,UFS,JFS2
网络文件系统:NFS,CIFS
集群文件系统:GFS2,OCFS2
分布式文件系统:ceph
moosefs,mogilefs,GlusterFS,Lustre
根据其是否支持“journal”功能:
日志型文件系统:ext3,ext4,xfs,....
非日志型文件系统:ext2,vfat
文件系统的组成部分:
内核中的模块:ext4,vfs,vfat
Linux的虚拟文件系统:VFS
mkfs 文件系统的管理工具
-L 'LABEL' 设定卷标
mkswap:创建交换分区
mkswap [OPTION0] ... [DEVICE]
-L 'LABEL' 设定卷标
前提:调整分区的ID为82
blkid 设备名 块设备属性信息查看 显示唯一标识符(UUID)
blkid [OPTION0] ... [DEVICE]
-U UUID: 根据指定的UUID来查找对应得设备
-L LABEL: 根据指定的标签来查找对应的设备
tune2fs:重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息:super block
-L ‘LABEL’,修改卷标
-U UUID:修改UUID号
-O:文件系统属性启用或禁用
-o:调整文件系统的默认挂载选项
dumpe2fs:
-h:查看超级块信息
文件系统检测:
fsck:File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-a:自动修复错误
-r:交互式修复
Note:FS_TYPE一定要与分区上的文件类型相同
mount/umount
将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为称之为挂载;
解除此关系的过程称之为卸载;
备注:挂载点下原有文件在挂载完成后会被临时隐藏;
挂载方法: mount DEVICE MOUNT_POINT
mount:显示当前系统已挂载的所有设备
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备;
(1)设备文件:例如/dev/sda5
(2)卷标: -L ‘LABEL’,例如 -L ‘MYDATA’
(3)UUID,-U ‘UUID’,例如 -U ‘9e04a8b8-26a0-4bfd-9da2-d3d0aa39aee6’
dir:挂载点
事先存在,建议使用空目录
进程正在使用中的设备无法被卸载
常用选项:
-t vsftype:指定要挂载的设备上的文件系统类型;
-r:readonly 只读挂载;
-w:read and write 读写挂载;
-B,--bind:绑定目录到另一个目录上;
注意:查看内核追踪到的已挂载的所有设备:cat /proc/mounts
-o options:(挂载文件系统的选项)
async:异步模式 直接更新内存中的数据 速度快 数据可能会丢失
sync:同步模式 更新内存中的数据直接存储在磁盘上 速度慢 数据不会丢失
exec/noexec: 是否支持将文件系统上应用程序运行为进程
dev/nodev: 是否支持在此文件系统上使用设备文件
remount:重新挂载
ro
rw
user/nouser:是否允许普通用户挂载此设备
acl:启用此文件系统上的ACL功能
注意:上述选项可多个同时使用,彼此使用逗号分隔
默认挂载选项:defaults
rw,suid,dev,exec,auto,nouser,and async
查看正在访问指定文件系统的进程:
#fuser -vMOUNT_POINT
终止所有正在访问指定的文件系统的进程:
# fuser -km MOUNT_POINT
挂载交换分区:
启用:swapon
swapon [OPTION]...[DEVICE]
-a:激活所有交换分区
-p PRIORITY:指定优先级
禁用:swapoff [OPTION]...[DEVICE]
df 查看硬盘分区空间使用情况
格式 df 选项 分区
参数 -h 以 1024 进制进行单位换算
-H 以 1000 进制进行单位换算
-t 指定显示分区的类型(后跟文件类型) -T 显示文件类型
-i 显示分区的 inode 使用情况
free 查看内存使用情况
格式 free 选项 分区
选项 -m 以1024KB=1M计算
-g 以1024MB=1G计算
文件挂载的配置文件:/etc/fstab
文件系统的信息存储
1.可以通过fstab配置实现自动挂载/半自动挂载
2.预设置相关选项/权限
3.是否可以dump
4.是否可以fsck
文件格式 (一般不自检不转储)
第一列 设备文件/卷标/UUID UUID获得 #blkid 设备文件
第二列 挂载点
第三列 文件系统格式
第四列 选项/权限(mount权限/选项)默认default
第五列 转储频率 表示是否备份 0:不做备份 1:每天转储 2:每隔一台能转储
第六列 自检次序 是否适用fsck 0:否 1:首先自检,一般只有rootfs才用1 2:为用且为非/分区
练习:
1.创建一个20G的文件系统,块大小为2048,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testing目录,且默认有acl挂载选项;
fdisk /dev/vdb
mkfs.ext4 -L ‘TEST’ /dev/vdb3
echo ‘LABEL=‘TEST’ /testing ext4 acl,defaults 0 0’ >> /etc/fstab
mount -a
2.创建一个5G的文件系统,卷标为HUGE,要求此分区开机自动挂载至/mogdata目录,文件系统类型为ext3;
fdisk 分区 划分出一个5G的分区
mkfs -t ext3 -L 'HUGE' 分区
echo "分区 /mogdata ext3 default 0 0" >> /etc/fstab
3.写一个脚本,完成如下功能:
(1)列出当前系统识别的所有磁盘设备,
(2)如磁盘数量为1,则显示其空间使用信息,否则,则显示最后一个磁盘上的空间使用信息;
脚本:(这个没意义)
#!/usr/bin
if fdisk -l | grep "Disk /dev/vd" & > /dev/null
then
fdisk -l
a=`fdisk -l | grep "Disk /dev/vd" | wc -l`
if [ "$a" -eq 1 ]
then
echo `fdisk -l | grep "Disk /dev/vd"`
else
echo `fdisk -l $(fdisk -l | grep "Disk /dev/vd" | tail -1 | cut -d ' ' -f2 | cut -d ':' -f1)`
fi
else
echo "No disk"
fi
Raid: 廉价冗余磁盘阵列
Redundant Arrays of Inexpensive Disks
Independent
Raid控制器
目的:提高IO能力:磁盘并行读写(给磁盘阵列加raid内存卡)
提高耐用性:磁盘冗余实现
级别:多块磁盘组织在一起的工作方式有所不同
RAID实现的方式:
硬件 外接式磁盘阵列:通过扩展卡(适配器)提供适配能力
内接式RAID:主板自己集成的RAID控制器
硬件式RAID:它的配置在BIOS中实现
软件 Software RAID(主机不支持,使用软件方式实现):
常用级别:RAID-0,RAID-1,RAID-5,RAID-10,JBOD
RAID-0:条带
读、写性能提升
可用空间:N*min(S1,S2,…)
无容错能力
最少磁盘数:2,2+
RAID-1:镜像
读性能提升、写性能略有下降
可用空间:1*min(S1,S2,…)
有冗余能力
最少磁盘数:2,2+
RAID-5:
读、写性能提升
可用空间:(N-1)*min(S1,S2,…)
有容错能力:1块磁盘
最少磁盘数:3,3+
RAID-10:
读、写性能提升
可用空间:N*min(S1,S2,…)/2
有容错能力:每组镜像最多只能坏一块;
最少磁盘数:4,4+
JBOD:Just a Bunch Of Disks
功能:将多块磁盘的空间合并一个大的连续空间使用:
可用空间:所有磁盘加起来 SUM(S1、S2…)
软件实现方式(一般不使用)
Centos 6上的软件RAID的实现:
结合内核中的md模块(multi devices)
mdadm:模式化的工具
命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>
模式:
创建:-C
装配:-A
监控:-F
管理:-f,-r,-a
<raiddevice>:/dev/md#
<component-devices>:任意块设备
watch命令:
-n #:刷新间隔,单位是秒;
watch -n# 'COMMAND'
LVM:Logical Volume Manager: Version:2
dm(模块):device mapper:将一个或多个底层块设备组织成一个逻辑设备的模块。
设备名:/dev/dm-0(查看设备名ll /dev/mapper)
创建前分区在fdisk中把分区类型改为8e fdisk输入l查看分区id t修改分区id
pv管理工具:
pvs:简要pv信息显示
pvdisplay:显示pv的详细信息
pvcreate /dev/DEVICE:创建pv
vg管理工具:
vgs
vgdisplay
vgcreate [-s 指定PE大小] VloumGroupName PhysicalDevicePath [PhysicalDevicePath…]
vgextend VloumGroupName PhysicalDevicePath [PhysicalDevicePath…]
vgreduce VloumGroupName PhysicalDevicePath [PhysicalDevicePath…]
lv管理工具:
lvs
lvdisplay
lvcreate -L 卷大小 -n lvname VolumeGroup
扩展逻辑卷:(当逻辑卷正在使用需要扩大时)
#lvextend -L [+]卷大小 /dev/vgname/lvname(-L表示增加到)
此时逻辑卷增大了,文件系统并没有增加,需要将文件系统也增加
#resize2fs /dev/vgname/lvname(更改文件系统大小,不需要卸载,适用于ext系列)
缩减逻辑卷:(必须先将文件系统缩减再缩减物理空间)
#umount /dev/vgname/lvname(必须先卸载)
#e2fsck -f /dev/vgname/lvname(文件系统的强制检测和修复,适用于ext系列)
#resize2fs /dev/vgname/lvname 5G(缩减的大小)
注意:缩减后的大小必须要大于使用的空间
#lvreduce -L +卷大小 /dev/vgname/lvname (-L表示缩减到)
#mount(将原文件系统挂载上)
备份都过程:将数据序列化,再传输。任何数据都必须被序列化才能被传输
(可以理解为一根线缆承载的数据流有限,所以需要序列化才能传输)
快照:snapshot 快照卷的大小取决于原卷变化的数据量*日期
快照卷的好多文件其实都是和原文件系统共用的,所以快照卷相当于一个分区的另一个入口,这样快照卷肯定在该分区上,对LVM而言就是在一个卷组上,不可以跨卷组创建快照卷
快照存放的是原始卷的元数据,真实数据还是在原卷中
快照卷创建
lvcreate -L 卷大小 -p(指定权限) r(只读) -s(指明是快照卷) -n snapshot_lv_name 卷组名(lvname)
练习:
1.创建一个至少有两个PV组成的大小为20G的名为testvg的VG:要求PE大小为16MB,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/user目录;
#vgcreate -s 16M testvg /dev/vdc[12]
#lvcreate -L 5G -n testlv testvg
#mkfs.ext4 /dev/testvg/testlv
#mount /dev/testvg/testlv /user/
2.新建用户archlinux,要求其家目录为/user/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录;
#useradd -b /user archlinux
#su archlinux
#cd
#cp -r /etc/pam.d ./
3.扩展testlv至7G,要求archlinux用户的文件不能丢失
#lvextend -L 7G /dev/testvg/testlv
#resize2fs /dev/mapper/testvg-testlv
4.收缩testlv至3G,要求archlinux用户的文件不能丢失;
#umount /user
#e2fsck -f /dev/testvg/testlv
#resize2fs /dev/testvg/testlv 3G
#lvreduce -L 3G /dev/testvg/testlv
#mount /dev/testvg/testlv /user
5.对testlv创建快照,并尝试基于快照备份数据,验证快照功能;
#lvcreate -s -n snaplv -L 3G -p rw /dev/testvg/testlv
文件系统挂载使用:
挂载光盘设备:mount -r /dev/cdrom /media/cdrom
umount /dev/cdrom
光盘设备文件:
IDE:/dev/hdc
SATA:/dev/sr0
符号链接文件:
/dev/cdrom
/dev/cdrw
/dev/dvd
/dev/dvdrw
dd 命令:convert and copy afile
用法:
复制: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
清除磁盘分区(破坏MBR中的bootloader):
dd if=/dev/zero of=/dev/sda bs=512 count=1
MBR中一共有512个字节,前446位为bootloader,64是分区表
两个数据设备:
/dev/null:数据黑洞,可以无限放数据
/dev/zero:吐零机