Linux入门攻坚——8、磁盘管理——btrfs文件系统及压缩解压缩和归档
Btrfs(B-tree),支持CoW,写时复制;
核心特性:
多物理卷支持:btrfs可由多个底层物理卷组成:支持RAID,以联机添加、移除,修改
写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;
数据及元数据校验码:checksum
子卷:sub_volume
快照:支持快照的快照;
透明压缩:
Centos6上默认没有安装。
centos7上:
使用btrfs --help可以查看帮助。
文件系统创建:
mkfs.btrfs
-L 'LABEL' :
-d <type> :raid0,raid1raid5,raid6,raid10,single
-m <profile>:raid0,raid1,raid5,raid6,raid10,single,dup
-O <feature>
-O list-all:列出支持的所有feature;
systemctl set-default multi-user.target 设置默认字符界面启动
不需要分区,直接将磁盘做成btrfs系统 ,添加三块磁盘:
直接格式化btrfs:
属性查看:
btrfs filesystem show
使用blkid查看:
UUID相同,说明都是同一个btree卷,但是子卷是不同的。所以btrfs支持多物理卷。
查看卷标:
挂载文件系统:
mount -t btrfs /dev/sdb MOUNT_POINT
挂载的设备可以是btr卷中的任意一个物理卷名,如这里的/dev/dec,也可以使用/dev/sdd,结果一样,mount显示的挂载设备是序列号最小的物理卷。
使用/dev/sdd挂载,结果一样:
透明压缩机制:
mount -o compress={lzo | zlib} DEVICE MOUNT_POINT
特性中多了compress=lzo。压缩解压缩是自动且对用户是透明的。
btrfs系统原生支持RAID。
直接联机修改大小:
btrfs filesystem resize [-|+]size MOUNT_POINT
使用max,直接调整到最大物理卷容量。
添加新的物理设备:
btrfs device add DEVICE MOUNT_POINT
自动扩展了。
使文件均衡保存,即均衡操作:
btrfs balance status /mybtr :显示均衡状态
btrfs balance start /mybtr :启动均衡操作
移除物理设备:
btrfs device delete /dev/sdd /mybtr
修改数据、元数据等的底层存储的RAID级别。
btrfs balance start -mconvert=raid5 /mybtr
子卷管理:
btrfs subvolume list /mybtr :显示子卷
btrfs subvolume create /mybtr/logs :创建logs子卷
挂载父卷时,同时会挂载子卷:
也可以单独挂载子卷:
btrfs -o subvol=logs DEVICE MOUNT_POINT
显示子卷的信息:btrfs subvolume show MOUNT_POINT
mount -o subvolid=subvolume_id /dev/sdd /btrsub,如上面显示的subvolume ID为264,可以如下挂载:
删除子卷:
创建快照:
创建logs的快照logs_snapshot,文件及内容相同。
修改/mybtr/logs/grub2.cfg,保存,此时在快照中的文件内容不变。
对单个文件创建快照:cp --reflink grub2.cfg grub2.cfg_snap
快照要在当前卷或其子目录下。修改grub2.cfg,快照grub2.cfg_snap保持不变。
文件系统的转换,将ext转换为btrfs:
先创建一个分区,格式化为ext4:
要转化文件系统,先卸载,在检测,最后转换:
.
回滚到ext系统:
btrfs子命令:filesystem、device、balance、subvolume等
压缩、解压缩及归档工具
compress/uncompress:.Z
gzip/gunzip:.gz
bzip2/bunzip2:.bz2
xz/unxz:.xz
zip/unzip:.zip
tar,cpio
1、gzip/gunzip
gzip [OPTION] FILE
-d:解压缩,相当于gunzip
-c:将结果输出至标准输出,gzip -c FILE > FILE.gz将保留源文件
-#:指定压缩比,1-9
压缩:gzip FILE
解压缩:gunzip FILE.gz
压缩后,源文件删除,解压缩后,压缩文件删除,节省空间。
zcat:不显示展开的前提下查看文本文件内容;
2、bzip2/bunzip2/bzcat
bzip2 [OPTION] FILE
-k:保留源文件
-d:解压缩
-#:1-9,压缩比
3、xz/unxz/xzcat
xz [OPTION] FILE
-k:保留源文件
-d:解压缩
-#:1-9,压缩比
对目录进行压缩,只能压缩目录中的文件:
4、tar
tar [OPTION]...
(1)创建归档
tar -c -f /PATH/TO/SOMEFILE.tar FILE...
tar -cf /PATH/TO/SOMEFILE.tar FILE...
(2)查看归档文件中的文件列表
tar -t -f /PATH/TO/SOMEFILE.tar
(3)展开归档
tar -x -f /PATH/TO/SOMEFILE.tar
tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/OTHER
归档后文件大小可能变大,归档不是压缩,可以在归档的同时再压缩。
结合压缩工具实现归档并压缩,使用归档的如下选项:
-j:bzip2,-z:gzip,-J:xz
bash脚本编程:
循环:for,while,until
循环体:要执行的代码,可能要执行 n遍
进入条件、退出条件
for循环:
for 变量名 in 列表;do
循环体
done
执行机制:依次将列表中的元素赋值给“变量名”;每次赋值后即执行一次循环体;直到列表中的元素耗尽,循环结束。
1 #!/bin/bash
2 #
3
4 if [ ! $UID -eq 0 ]; then
5 echo "Only root."
6 exit 1
7 fi
8 for username in user1 user2 user3; do
9 if id $username &> /dev/null; then
10 echo "$username exists."
11 else
12 useradd $username
13 if [ $? -eq 0 ]; then
14 echo "$username" | passwd --stdin $username &> /dev/null
15 echo "Add $username finished."
16 fi
17 fi
18 done
列表:
1) 直接给出列表,用空格隔开的序列
2) 整数列表:{start..end} 如{1..10},$(seq [start] [step] end),如$(seq 2 3 10)
3) 返回列表的命令:$(COMMAND),如 $(ls /var)
4) glob通配机制
5) 变量引用:$@,$*