ZFS 重复数据集

ZFS 重复数据集

我在 apt 中遇到错误,这似乎与启动分区上没有足够的空间有关。dpkg --configure -a

Setting up initramfs-tools (0.140ubuntu13) ...
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools (0.140ubuntu13) ...
update-initramfs: Generating /boot/initrd.img-5.15.0-46-generic
...
zstd: error 25 : Write error : No space left on device (cannot write compressed block) 
E: mkinitramfs failure zstd -q -1 -T0 25
update-initramfs: failed for /boot/initrd.img-5.15.0-46-generic with 1.
dpkg: error processing package initramfs-tools (--configure):
 installed initramfs-tools package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 initramfs-tools

我已经清理了分区,但问题仍然存在。 du -d1 -h /boot给出

8.2M    /boot/grub
14M /boot/efi
373M    /boot
373M    total

zfs list产量:

bpool                                   1.64G   115M       96K  /boot
bpool/BOOT                              1.63G   115M       96K  none
bpool/BOOT/ubuntu_kd8ik4                 325M   115M      351M  /boot
bpool/BOOT/ubuntu_xwub0c                1.32G   115M      351M  /boot

zpool status -v bpool

  pool: bpool
 state: ONLINE
  scan: scrub repaired 0B in 00:00:01 with 0 errors on Thu Aug 18 11:10:49 2022
config:

    NAME                                    STATE     READ WRITE CKSUM
    bpool                                   ONLINE       0     0     0
     ef6a5d5a-29e2-3b47-bd01-cc9b33b50787  ONLINE       0     0     0

errors: No known data errors

那么现在看起来虽然数据已从分区中删除,但它实际上仍然存在于旧快照中?

但是,zfs list -rt snapshot bpool没有显示大分区。

NAME                                           USED  AVAIL     REFER  MOUNTPOINT
bpool/BOOT/ubuntu_xwub0c@autozsys_g612ij        72K      -      254M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_zz6jnc        56K      -      254M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_37jsph        56K      -      254M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_e1jf32         0B      -      254M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_iediod         0B      -      254M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_kvs9cu         0B      -      254M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_2ljo2e         0B      -      254M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_nuk0ub         0B      -      254M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_ofjed2         0B      -      254M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_wbqse4         0B      -      455M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_x820pz         0B      -      455M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_wwx7np         0B      -      455M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_fhi1tz        72K      -      341M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_8jj3zu        64K      -      341M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_bfdhhr         0B      -      341M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_95dnyh         0B      -      341M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_7orem7        64K      -      341M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_5rpfzz        72K      -      351M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_1npt7j         0B      -      351M  -
bpool/BOOT/ubuntu_xwub0c@autozsys_uevq0m         0B      -      351M  -

有任何想法吗?也许也可以帮助我理解我在这里看到的内容。如果这些不是快照,那么它们是什么以及如何整合它们?

编辑 zfs list -o name,used,usedsnap -s usedsnap bpool

NAME    USED  USEDSNAP
bpool  1.64G        0B

答案1

长话短说:

通过手册页获取:man zfs

在不同的驱动器上设置一个“测试池”,并了解该池上的快照和文件系统,这样您就不必担心对系统关键池执行某些操作。

交朋友,zfs list这样你就知道你正在查看文件系统还是快照:zfs list -rt filesystem/`zfs list -rt snapshot'

交朋友,zfs get这样你就知道如何显示文件系统或快照的各种属性:zfs get all

最后,为快照制定备份策略,并确定要保留哪些快照,不保留哪些快照。zfs destroy -v ....对您不想要的快照进行操作。


为了学习如何使用 ZFS 数据集,阅读zfs手册页是值得的。 ZFS 数据集具有许多属性,具体取决于您是否使用数据集、快照、卷等。

对于初学者,

zfs list [-r|-d 深度] [-Hp] [-o 属性[,属性]...] [-s 属性]... [-S 属性]... [-t 类型[,类型] ...] [文件系统|卷|快照]...

以表格形式列出给定数据集的属性信息。如果指定,您可以按绝对路径名或相对路径名列出属性信息。默认情况下,显示所有文件系统和卷。如果listsnaps 属性打开(默认为关闭),则会显示快照。显示以下字段:名称、已使用、可用、引用、安装点。

如果您不清楚正在查看的条目是文件系统还是快照,您可以指示zfs仅显示您想要查看的类型。要仅查看文件系统,请使用:

zfs list -rt filesystem bpool

要仅查看快照,请使用:

zfs list -rt snapshot bpool

要同时查看两者,请尝试:

zfs list -rt all -o name,type,creation

您可以通过更具描述性地选择文件系统和快照名称来提高文件系统布局的清晰度。我通常根据 YYYYMMDD-HHMMSS 来命名快照,因此我可以很快看到名为 的快照poolname/var/db@20220817-000500是文件系统的快照/var/db,并且比名为 的快照更新poolname/var/db@20220815-000500

creation可以查询该属性以zfs显示创建快照时的日期戳:

$ zfs get creation poolname/var/db@20220817-000500
NAME                             PROPERTY  VALUE                  SOURCE
poolname/var/db@20220817-000500  creation  Wed Aug 17  0:05 2022  -

或显示数据集所有快照的名称和创建poolname/var/db

$ zfs list -rt snap -o name,creation poolname/var/db
NAME                                    CREATION
poolname/var/db@20220812-000500         Fri Aug 12  0:05 2022
poolname/var/db@prior-to-installworld   Fri Aug 12 12:13 2022
poolname/var/db@20220813-000500         Sat Aug 13  0:05 2022
poolname/var/db@20220814-000500         Sun Aug 14  0:05 2022
poolname/var/db@20220815-000500         Mon Aug 15  0:05 2022
poolname/var/db@20220816-000500         Tue Aug 16  0:05 2022
poolname/var/db@20220817-000500         Wed Aug 17  0:05 2022
poolname/var/db@prior-to-installkernel  Wed Aug 17 12:54 2022
poolname/var/db@20220818-000500         Thu Aug 18  0:05 2022
poolname/var/db@20220819-000500         Fri Aug 19  0:05 2022

要查看 ZFS 为文件系统存储的属性示例,请尝试:

zfs get all bpool

一旦掌握了哪些属性在工作流程中有用,您就可以调整部分-ozfs list -rt all -o name,type,creation列出这些属性。

至于您关于哪些快照可以安全删除的问题,根据定义,所有快照可以安全删除。它们是快照,而不是文件系统。 (请注意,zfs如果快照是克隆文件系统的起源,则不会让您销毁快照。)与任何备份策略一样,您应该有意计划拍摄快照的频率以及存储快照的时间。通常会有一段时间,快照的寿命会增长到快照作为备份点不再有价值的程度,因为发生了太多变化,以至于恢复到那么早的状态会很痛苦。一旦快照达到该期限,明智的做法是定期清除它们以恢复快照使用的池空间。这是另一种情况,使用有意义的、易于理解的快照名称可以帮助您区分哪些快照对您重要,哪些快照不重要。但备份策略的主题完全是“另一锅鱼……”

当您确定要销毁的快照时,可以将名称复制并粘贴到命令行中:

zfs destroy -v bpool/BOOT/ubuntu_xwub0c@autozsys_g612ij

最后,我对我所要求的财产不够具体USEDSNAP。但如果你这样做:

zfs list -o name,used,usedsnap bpool/BOOT/ubuntu_xwub0c

您应该看到该数据集总共使用了多少空间,以及快照占用了多少空间。

我希望这可以帮助您开始阅读zfs手册页并了解如何查询 ZFS 系统以获得您想要的信息。

相关内容