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
当 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 中的空间,例如
- 如果zpool中还有剩余空间,则增加配额
- 缩小 zvol 的大小
- 临时销毁一个dump设备(如果rpool受到影响)
- 删除未使用的快照
- 通过扩大一个vdev或者增加一个vdev来增加zpool的空间
- 暂时减少 ZVol 的 refreservation
- 回滚日志
2. 增加配额
我们可以检查当前配额
# zfs get quota {filesystem} # zfs get refquota {filesystem}
如果设置了配额,那么我们可以增加它
# zfs set quota={value} {dataset} # zfs set refquota={value} {dataset}