之路教程 https://onitr oad .com

5. 删除未使用的快照

列出快照

# zfs list -t snapshot

我们可以对输出进行排序;这里使用了“used”属性:

# zfs list -t snapshot -S used

我们可以看到快照的内容;在文件系统的根目录中有一个特殊的目录“.zfs/snapshot”。
默认情况下,目录“.zfs”是隐藏的。
我们需要更改属性“snapdir”以查看目录:

# zfs set snapdir=visible {filesystem}

现在我们可以使用 cd(1) 更改目录 /{filesystem}/.zfs/snapshot 并检查内容。
然后决定我们不需要哪个快照并删除它

# zfs destroy {snapshot}

3. 缩小 zvol 的大小

如果受影响的 zpool 的 zvol 还剩下一些空间,则可以将其缩小。

# zfs set volsize=[newsize] ZPOOL/ZVOL

对于 rpool 及其转储 zvol,它看起来像这样:

# zfs set volsize=[newsize] rpool/dump

4. 销毁 rpool(或者未使用的 zvol)上的转储设备

rpool 的转储设备可以暂时销毁,因为它用于存储实时转储(“savecore -L”)或者发生紧急情况时的故障转储。

# dumpadm
Dump content      : kernel with ZFS metadata
Dump device       : /dev/zvol/dsk/rpool/dump (dedicated)
Savecore directory: /var/crash
Savecore enabled  : yes
Save compressed   : on

我们可以使用以下命令检查所有 zvol

# zfs list -t volume
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool/dump     5.16G  11.4G  4.00G  
rpool/swap     2.06G  10.3G  2.00G  
rpool/testvol   103M  10.3G  8.13M
# zfs list rpool/dump
NAME         USED  AVAIL  REFER  MOUNTPOINT
rpool/dump  5.16G  11.4G  4.00G

请注意稍后重新创建 zvol 的 volsize;在这种情况下,可以通过销毁 zvol 来创建 4 GB 的空间。

# zfs destroy rpool/dump

稍后我们可以使用以下命令重新创建 zvol(请注意,这里根据示例使用了 4 GB 的大小;指定我们在“zfs get volsize rpool/dump”的输出中看到的 volsize):

# zfs create -V 4g rpool/dump
如何删除使用率已经100%的ZFS 文件系统上的文件

当 ZFS 文件系统没有剩余空间时,文件删除可能会因“disk quota exceeded - 超出磁盘配额”而失败。
该帖子提供了不同的方法来创建空闲空间来解决这种情况。

8.回滚日志

如果 zpool 的导入由于“空间不足”而失败,那么我们可以通过将日志回滚到之前提交的日志来导入;但是,在提交之后对文件系统的所有更新都将丢失。
你可以通过

# zpool import -F ZPOOLNAME

它会告诉我们日志回滚到的时间点,例如:

# zpool import -F rpool

Pool rpool 已于 2016 年 6 月 9 日星期四 07:12:01 恢复到其状态。
如果我们只想检查这是否可行,那么我们可以这样做

# zpool import -Fn ZPOOLNAME

6.通过扩大一个vdev或者增加一个vdev来增加zpool中的空间

我们可以向 zpool 添加另一个 vdev 以使其更大。
如果 zpool 由 raidzN vdevs 组成,请确保添加另一个 raidzN vdevs。
如果我们错误地添加了单个 vdev,那么 zpool 不再是完全冗余的;我们可以添加另一个 vdev 以将镜像添加到 raidzN vdevs 并具有另一种类型的冗余。
但是如果你犯了一个错误,那么这可以通过重新创建整个 zpool 来纠正。

我们可以通过增加底层 LUN 或者扩大分区来增加 vdev。
请确保为 zpool 设置了以下属性:

# zpool get autoexpand {zpool}
# zpool set autoexpand=on {zpool}

通过这种方式,ZFS 将检测所用存储设备大小的更改并将更改传播到 vdev。

7. 暂时减少 ZVol 的 refreservation

暂时减少未使用其所有保留空间的任何 zvol 的 refreservation。
这会释放 zpool 内的空间,以便在将 refreservation 恢复到其原始值之前实施更持久的解决方案。

列出 zvol:

# zfs list -t vol
NAME        PROPERTY        VALUE  SOURCE
rpool/dump  referenced      4.00G  
rpool/dump  refreservation  5.16G  local

选择一个 zvol 并显示其当前的 refreserv 和 usedbyrefreserv:

# zfs get refreservation,usedbyrefreservation rpool/dump
NAME        PROPERTY              VALUE  SOURCE
rpool/dump  refreservation        5.16G  local
rpool/dump  usedbyrefreservation  1.16G

减少refreserv:

# zfs set refreservation=5.0G rpool/dump

注意:'refreservation' 可能大于必要。
我们可以使用“自动”为非稀疏卷保留足够的空间。
成功删除数据后,将refreservation恢复到原始值,这里:

# zfs set refreservation=5.16G rpool/dump

注意:'refreservation' 可能大于必要。
我们可以使用“自动”为非稀疏卷保留足够的空间。

1. 截断文件

如果文件不能直接删除,我们可以先截断它们,然后再删除它们。

# cat /dev/null > /file/to/delete
# rm /file/to/delete

替代方案:还有其他选项可以释放 zpool 中的空间,例如

  1. 如果zpool中还有剩余空间,则增加配额
  2. 缩小 zvol 的大小
  3. 临时销毁一个dump设备(如果rpool受到影响)
  4. 删除未使用的快照
  5. 通过扩大一个vdev或者增加一个vdev来增加zpool的空间
  6. 暂时减少 ZVol 的 refreservation
  7. 回滚日志

2. 增加配额

我们可以检查当前配额

# zfs get quota {filesystem}
# zfs get refquota {filesystem}

如果设置了配额,那么我们可以增加它

# zfs set quota={value} {dataset}
# zfs set refquota={value} {dataset}
日期:2020-09-17 00:15:09 来源:oir作者:oir