我想的“10.9T的” ZFS输出转换为实际字节,使用一两行的东西,而不是运行通用的数学函数,并且如果条件T
,G
,M
,等有没有一种有效的方式来做到这一点?
现在,我有这样的事情:
MINFREE="50G"
POOLSIZE=`zpool list $POOLNAME -o size` #Size 10.9T
POOLSIZE=$(echo "$POOLSIZE" | grep -e [[:digit:))] #10.9T
POOLFREE=500M #as an example
let p=POOLSIZE x=POOLFREE y=MINFREE z=POOLSIZE;
CALC=$(expr "echo $((x / y))")
if [ "${CALC}" < 1 ]; then
# we are less than our min free space
echo alert
fi
Run Code Online (Sandbox Code Playgroud)
这会产生一个错误:无法在 上运行表达式10.9T
,或者50G
因为它们不是数字。
是否有已知的bash
功能?
我也喜欢指定它的便利,就像我MINFREE
在顶部的var 中所做的那样。所以一个简单的转换方法会很好。
这是我希望避免的(为每个字母设置大小写),尽管脚本看起来很干净。
编辑:感谢所有评论!这是我现在拥有的代码。,至少相关部分;
POOLNAME=san
INFORMAT=auto
#tip; specify in Gi, …
Run Code Online (Sandbox Code Playgroud) 我想删除zfs
数据集子目录的内容。这是大量的数据。对于池“nas”,路径是/nas/dataset/certainFolder
$ du -h -d 1 certainFolder/
1.2T certainFolder/
Run Code Online (Sandbox Code Playgroud)
而不是我必须等待,rm -rf certainFolder/
我不能只是销毁该目录的句柄,以便它可以覆盖(如果我选择重新创建它,甚至可以使用相同的目录名称)??
因此,例如,对于zfs
文件系统内部结构知之甚少,特别是它如何记录其文件,我想知道我是否能够直接访问该日志/映射,例如,然后删除正确的条目,以便不再显示目录。该空间目录也必须从某种审计中删除。
是否有捷径可寻?即使在ext3 fs 上,或者这已经是递归删除命令首先要做的事情,即窃取和编辑期刊?
我只是希望做一些类似的事情kill thisDir
,它只是删除某种 ID,并且目录不再出现在ls -la
. 数据显然仍然在驱动器上,但现在空间将被重用(覆盖),因为 ZFS 就那么酷?
我的意思是我认为zfs真的很酷,我们该怎么做?理想情况下?搓手:-)
我的具体用例(除了我对 的热爱zfs
)是管理备份存档。数据通过 freefilesync (AWESOME PROG) 推送到 zfs,在 SMB 上/从 win box 到 zfs 池。删除rm -rf /nas/dataset/certainFolder
一个putty
词条时,它就卡住了,这个词条现在很长一段时间都不能用了。我当然必须打开另一个终端才能继续。那已经过时了,而且监视 rm -rf 没有乐趣,这可能需要几个小时。
也许我应该将命令设置为仅释放句柄,例如&
,然后打印到标准输出,这可能很好。 更现实的是,zfs destroy nas/dataset; zfs create -p -o compression=on nas/dataset
根据@Gilles 的响应,在几秒钟内重新创建数据集。