两种特殊文件;
设备文件;
mknod
符号链接文件;
链接;就是访问一个文件的不同的路径
硬链接;
数据块指针指向同一个数据块的文件;
每次创建硬链接都会增加inode的引用计数
注意;不能跨文件系统创建硬链接,目录文件不能创建硬链接
符号链接(软链接)
用于存储被链接文件的路径的文件
可以夸文件系统创建,
也可以对目录创建符号链接
每次都必须进行两组路径的查找
ln命令;
ln [option...] src_file link_file
-s,--symbolic;创建符号链接,省略该选项,即创建硬链接
-v, --verbose;显示链接创建的过程可以,最好链接至
注意;创建符号链接时,如果想要保证该链接文件被复制或移动到其他路径中依然可以,最好链接至被链接文件的绝对路径
版本管理;
apache;
2.2 2.4
将不同的版本的软件分别放置于不同的目录中,使用符号,将软件链接的一个统一的路径;
/usr/local/apache ---> /usr/local/apache-2.2
/usr/local/apache-2.2
/usr/local/apache-2.4
RAID;
IDE
SCSI
Redundant Array of Inexpensive Disks;廉价磁盘冗余阵列
Redundant Array of Independent Disks;独立磁盘冗余阵列
RAID;
提高IO能力
使多个磁盘实现并行读写;
磁盘条带化,chunk
提高耐用性
磁盘冗余实现
即使磁盘发生故障或损坏,也不会影响数据;
RAID的实现方式;
硬件实现;
通过硬件RAID控制器或适配器,将所需的磁盘组织成RAID,而后安装OS;
BIOS程序
软件模拟实现;
操作系统通过系统调用的方式模拟RAID实现
RAID的操作级别;
RAID0;
提高IO性能,条带卷,strip
至少2块磁盘
没有冗余容错能力
没有存储空间浪费,要求每个磁盘必须提供相同大小的存储空间;
RAID1;
提供高可用性,镜像卷,mirror
需要2块磁盘
先将数据存入主盘,然后再将数据存入从盘;
写入效率较低,略微提升读效率
磁盘空间的整体利用率为50%
有冗余容错的能力
RAID2;
RAID3;
RAID4;
多块磁盘进行异或运算,得到校验值,并且使用专门的一块磁盘存放校验值;
即使一块磁盘损坏,也不会丢失数据
校验盘IO压力巨大,很容易形成性能瓶颈;
RAID5;
多块磁盘进行循环冗余校验吗,将校验值随机分配到不同磁盘的条带中;
读,写IO性能均明显提升,又不会出现性能瓶颈
磁盘利用率=(n-1)/n * 100%
冗余容错
至少需要3块磁盘
RAID6;
多块磁盘进行两轮循环冗余校验,将校验值随机分配到两个不同磁盘的条带中
读,写IO性能均明显提升,又不会出现性能瓶颈
最多运行两块磁盘出现故障或损坏依然保证数据可用
代价就是增加了计算校验值的时间;
RAID混合级别;
RAID01;
先做RAID0,在做RAID1
RAID10;
先做RAID1,在做RAID0
RAID50;
先做RAID5,在做RAID0
RAID7;
可以理解为一个存储计算机,自带操作系统以及相应的管理工具,可以独立运行
JBOD;just a bunch of disks;仅仅就是一组磁盘
将多块磁盘的存储空间连接到一起,顺序存放数据
在centos上实现软RAID
内核提供一个md的模块(multi disks,multi devices)
用户空间需要mdadm的工具,来设置和修改md内核模块的参数;
mdadm;模式化工具
mdadm [mode] <raiddevice> [option...] <component device>
模式包括;
创建模式;-C
-n#(数字):使用#(数字)块硬盘创建RAID设备
-l#(数字);指示RAID的级别
-a{yes|no};允许系统或不允许系统自动创建md设备文件;
-c CHUNK_SIZE;指定CHUNK的大小,
-x#(数字);指定在阵列中空闲磁盘的数量
装配模式;-A
根据/etc/mdadm.conf指示的RAID进行装配
管理模式;-a,-r,-f
杂项;
-D,--scan
显示RAID设备的详细信息
mdadm -D --scan > /etc/mdadm.conf
该配置文件用于RAID设备的再次装配
-S;停止RAID的设备
dd
LVM2;
logical volume manager,逻辑卷管理器,Version 2
IBM
使用纯软件的方式组织一个或多个底层的块设备,将他们重新定义为一个逻辑块设备的解决方案;
利用内核中的dm模块实现;
dm;device mapper,设备映射表
dm模块可以将一个或多个底层块设备组织成一个逻辑块设备;
用户空间中的相应命令来向dm模块发出系统调用,就可以完成后逻辑块设备的管理;
逻辑块设备同意存放在/dev/dm -#(数字)
使用DM机制实现LVM管理的步骤;
1.创建并标识物理卷
注意;如果用来创建物理卷的设备是普通分区,一定要将分区的ID修改为8e;
2.基于PV创建卷组,逻辑块设备,创建卷组的同时指定PE的大小
注意;一旦PE大小被指定,就不允许更改,
3.在已经创建的卷组中创建逻辑卷
4.在逻辑卷中创建文件系统(高级格式化)
5.挂载
物理卷的管理操作;
pvcreate;创建物理卷
pvdisplay;显示物理卷的详细信息
pvs;显示物理卷的简单信息
pvremove;删除物理卷
pvmove;将某个物理卷中的所有的PE移动到其他物理卷中;
卷组的管理操作;
vgcreate;创建卷组
-s #(数字){kkmMgG};指定PE的大小,如果省略选项,默认的PE为4M
vgremove;删除卷组
vgextend;扩展卷组容量,将新的pv添加到卷组中
vgreduce;缩减卷组容量,将pv从卷组中移除,在做此操作之前,应该先使用pvmove,保证被移除的pv上没有被占用的PE
vgdisplay;显示卷组的详细信息
vgs;显示卷组的简短信息
逻辑卷的管理操作;
lvcreate;创建逻辑卷
-L lv_SIZE(#(数字){kk|mM|gG});指定逻辑卷的大小,不能超过卷组的容量
-l #(数字)%{FREE|VG|ORIGIN|PVS};指定逻辑卷占用对应存储单元的百分比
-n LV_name;指定逻辑卷的名称
-i #(数字);在创建逻辑卷的时候,以条带的方式创建,并指明这个逻辑卷上有#(数字)个条带
-I #(数字);在创建逻辑卷的时候,以条带的方式创建,并指明CHUNK的大小;
lvremove;删除逻辑卷
lvdisplay;显示逻辑卷的详细信息
lvs;显示逻辑卷的简短信息
lvchange;修改LV的状态
-ay;激活逻辑卷
-an;停用逻辑卷
lvextend;扩展逻辑卷的空间;
注意;一定要扩展逻辑卷的物理边界,在扩展逻辑卷的逻辑边界
使用ext系列文件系统的时候,resize2fs命令扩展逻辑边界
lvreduce;缩减逻辑卷的空间;
注意;先缩减逻辑卷的逻辑边界,在缩减逻辑卷的物理边界
使用ext系列文件系统的时候,resize2fs命令缩减逻辑边界使用
为了更好的使用逻辑卷,为/dev/dm-#(数字)设备创建了两个符号链接为念;
/dev/mapper/VG_NAME-LV_NAME --> ../dm-#(数字)
/dev/VG_NAME/LV_NAME --> ../dm -#(数字)
逻辑卷的快照;
快照,本身就是一种逻辑卷;目标逻辑卷的另外一个访问路径;
lvcreate -s -p r -L 15G -n mylv-snopshot /PATH/TO/DEST_LV
-L SIZE:指定快照逻辑卷的大小
-s:创建一个快照逻辑卷
-p r:创建处理的逻辑卷是只读权限
-n SNAPSHOT_NAME:指定快照逻辑卷的名称
三个命令:
df命令:
df - report file system disk space usage
df [OPTION]... [FILE]...
-h, --human-readble:单位转换
-l, --local:只显示本地文件系统,不显示网络文件系统
-i, --inodes:显示inode使用状态
-T, --print-type:显示文件系统类型
-P, --portability:使用POSIX输出格式,更易于阅读
du命令:
du - estimate file space usage
du [OPTION]... [FILE]...
-s, sumary,:显示整个目录汇总的文件大小
-h, human-readble:单位转换
dd命令:convert and copy a file
dd [OPERAND]...
dd OPTION
常见的OPERAND:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=BYTES:block size, 复制单元大小
count=N:复制多少个bs
of=FILE:写到所命名的文件而不是到标准输出
if=FILE:从所命名文件读取而不是从标准输入
ibs=BYTES:一次读size个byte
obs=BYTES:一次写size个byte
skip=BLOCKS:从开头忽略blocks个ibs大小的块
seek=BLOCKS:从开头忽略blocks个obs大小的块
conv=conversion[,conversion...]:用指定的参数转换文件。
转换参数:
ascii:转换EBCDIC为ASCII。
ebcdic:转换ASCII为EBCDIC。
block:把每一行转换为长度为cbs的记录,不足部分用空格填充。
unblock:使每一行的长度都为cbs,不足部分用空格填充。
lcase:把大写字符转换为小写字符。
ucase:把小写字符转换为大写字符。
swab:交换输入的每对字节。
noerror:读取出错时继续读取。
notrunc:不截短输出文件。
sync:把每个输入块填充到ibs个字节,不足部分用空(NULL)字符补齐
磁盘拷贝:
~]# 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=64 count=1 seek=446
有二进制文件fileA,size>2K。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?
~]# dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
备份:
将本地的/dev/sdx整盘备份到/dev/sdy
~]# dd if=/dev/sdx of=/dev/sdy将本地的/dev/sdx整盘备份到/dev/sdy
将/dev/sdx全盘数据备份到指定路径的p_w_picpath文件
~]# dd if=/dev/sdx of=/path/to/p_w_picpath
备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
~]# dd if=/dev/sdx | gzip >/path/to/p_w_picpath.gz
恢复:
将备份文件恢复到指定盘
~]# dd if=/path/to/p_w_picpath of=/dev/sdx
将压缩的备份文件恢复到指定盘
~]# gzip -dc /path/to/p_w_picpath.gz | dd of=/dev/sdx
拷贝内存资料到硬盘
将内存里的数据拷贝到root目录下的mem.bin文件
~]# dd if=/dev/mem of=/root/mem.bin bs=1024
从光盘拷贝iso镜像
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
~]# dd if=/dev/cdrom of=/root/cd.iso
销毁磁盘数据
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。
~]# dd if=/dev/urandom of=/dev/sda1
得到最恰当的block size
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小
~]# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
~]# dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
~]# dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
~]# dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
测试硬盘读写速度
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度
~]# dd if=/root/1Gb.file bs=64k | dd of=/dev/null
~]# dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
修复硬盘
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。
~]# dd if=/dev/sda of=/dev/sda