文章目录
  1. 1. 起因
  2. 2. 安装btrfs
  3. 3. 迁移分区内容
  4. 4. 重点在此
    1. 4.1. 通过fstab挂载
    2. 4.2. 建立快照
    3. 4.3. 删除快照
    4. 4.4. 整理空间
    5. 4.5. 节省的空间

起因

公司里有一台机子我拿来当测试机跟备份机,生产服务器上的环境会完整备份到这台机子上。原先采用的是ext4文件系统 ,然后有五个不同日期的完整备份,今天在看lvm资料的时候想到用快照去节省一下空间。然后装了lvm,但又想用lzo压缩,所以就直接上了btrfs,反正是测试机,性能什么的不重要,稳定性也不重要。

安装btrfs

我的环境是 ubuntu 12.04 desktop ,用apt-get install btrfs-tools把btrfs-tools安装上去就有btrfs相关的支持工具了。

迁移分区内容

由于我原先是用了ext4分区,所以就把内容复制出来,格式化成btrfs后再放回去。等我整个做完后才知道有个叫btrfs-convert的工具可以直接转换,当时就斯巴达了。

重点在此

由于我是用做备份网站的内容,而网站的内容是增量的,所以用快照可以节省很多空间。

通过fstab挂载

1
UUID=2b8c8747-4e5b-40e5-a3b9-7739f27067fa /var btrfs defaults,compress=lzo 0 0

注意最后一个选项要用0,不检查磁盘,不然每次开机都会提示磁盘错误,无法挂载,询问你怎么处理。

建立快照

我这边的挂载点是 /mnt/bak ,然后我先通过 rsync 做了一次完整备份。现在要对当前的备份做一次快照。

1
btrfs subvolume snapshot /mnt/bak /mnt/bak/bak1

这样就会建立一个 path 为 ./bak1 的快照,里面会有一份完整的镜像。

再次用 rsync 同步文件后,这个时候文件已经发生了变化,然后用下面的命令再生成一个新的快照。

1
btrfs subvolume snapshot /mnt/bak /mnt/bak/bak2

这时就有两个完整备份了,如此这般可以写一个脚本每天定时同步并建立快照。快照只有在文件发生变更时才会增加空间,建立一个快照基本上是不会占用什么空间的。而且快照建立非常迅速,能直接完成,无需长时间等待。

删除快照

一些过期的备份可以删除掉,这时可以用下面的命令删除不再需要的快照。

1
btrfs subvolume delete /mnt/bak/bak1

整理空间

当一个快照被删除后,不会立即回收空间,需要整理空间才能被正常回收。

1
btrfs filesystem defragment /mnt/bak

整理工作是在线的,不需要停机,不会影响正常的操作。

节省的空间

我原来5个备份用了150G的空间,现在只要30G就可以搞定。然后我写了一个脚本,每天备份,保留一个月,这样灾难恢复时可用的备份就更多了。

文章目录
  1. 1. 起因
  2. 2. 安装btrfs
  3. 3. 迁移分区内容
  4. 4. 重点在此
    1. 4.1. 通过fstab挂载
    2. 4.2. 建立快照
    3. 4.3. 删除快照
    4. 4.4. 整理空间
    5. 4.5. 节省的空间