刪除未透過 UI 創建的快照

在 QuTS 5.x 中,可以在 UI 之外以 uid 0 建立快照,但一旦這麼做,就無法刪除該快照。
除了聯繫技術支援並讓他們花時間清理之外,有沒有什麼方法可以清除阻止快照被刪除的原因?我認為如果系統允許使用者一開始就建立快照,只要它不是 WORM,使用者就應該能夠刪除它。

[admin@qnap share]# zfs list -r zpool3/zfs33
NAME                            USED  AVAIL  REFER  MOUNTPOINT
zpool3/zfs33                    460K  20.2T   180K  /share/ZFS33_DATA
zpool3/zfs33@:init:             104K      -   160K  -
zpool3/zfs33/RecentlySnapshot   176K  20.2T   176K  /share/ZFS33_DATA/testfolder/@Recently-Snapshot
[admin@qnap share]# zfs snapshot zpool3/zfs33@testsnapshot
[admin@qnap share]# zfs list -r -t snapshot zpool3/zfs33
NAME                        USED  AVAIL  REFER  MOUNTPOINT
zpool3/zfs33@:init:         104K      -   160K  -
zpool3/zfs33@testsnapshot      0      -   180K  -
[admin@qnap share]# zfs destroy  zpool3/zfs33@testsnapshot
cannot destroy snapshots: permission denied
[admin@qnap share]# id
uid=0(admin) gid=0(administrators) groups=0(administrators),100(everyone)
[admin@qnap share]#

那麼直接透過 ZFS 指令來建立似乎不是個好主意,你有嘗試過使用 QNAP 的 qcli 工具嗎?

qcli_volumesnapshot

不只是快照。我只是舉了一個簡化的例子。當你有 ssh 存取裝置時,你可以執行各種操作,導致 kernel 或其他元件否決刪除的情況。我沒有時間詳細研究 QNAP 的 zfs 實作細節,但有一點讓我困惑的是,你「允許」用戶使用基本的 zfs 工具,而這很快就會導致他們卡住。我嘗試過用各種正常的 zfs 工具來刪除,但都無法成功。

有時候,在本地使用 zfs send/receive(我在另一篇文章有提到)會很「方便」。但這同樣會導致無法刪除 receive 的目標。也許 QNAP 應該加個警告,不要使用像 snapshot、send、receive 這類功能……我確實有開一張客服單,不過也在這裡問問看有沒有人知道。我想我也可以直接把硬碟拆下來,用一般的 zfs 系統來刪除。

我在這裡不能代表 QNAP 發言,但如果他們真的自己「煮」了 ZFS,那無論如何都很難有好結果。
禁止用戶執行指令 = 會引發抗議
允許用戶執行指令,但因為他們用的某些「特製配方」而導致失敗 = 也會引發抗議

我認為超過 95% 的 QNAP 用戶根本不會去關心這些「底層」細節,如果你屬於那不到 5%,你可以用 qcli,或者乾脆在這硬體上裝不同的發行版(例如 TrueNAS)。

這是有關快照(snapshots)特定的問題。即使你完全在 UI 之外建立一個儲存池(pool),只要建立了一個快照,就無法刪除任何內容。然而,如果你只是建立一個儲存池,只要沒有任何快照,就可以毫無問題地刪除它。QNAP 能否對這種行為做出說明?為什麼要允許建立一個無法刪除、會永久佔用儲存空間的快照?

[admin@qnap share]# zfs create zpool3/cli_test
[admin@qnap share]# zfs list -t snapshot -r zpool3/cli_test
no datasets available
[admin@qnap share]# zfs snapshot zpool3/cli_test@manual_snap
[admin@qnap share]# zfs list -t snapshot -r zpool3/cli_test
NAME                          USED  AVAIL  REFER  MOUNTPOINT
zpool3/cli_test@manual_snap      0      -   160K  -
[admin@qnap share]# zfs destroy zpool3/cli_test@manual_snap
cannot destroy snapshots: permission denied
[admin@qnap share]# zfs destroy -r zpool3/cli_test
cannot destroy snapshots: permission denied
[admin@qnap share]# zfs create zpool3/cli_test2
[admin@qnap share]# zfs destroy zpool3/cli_test2
[admin@qnap share]#

我想了解為什麼你要在命令列中完成這些操作,明明可以直接在介面(UI)中完成。你可能還需要執行其他指令或操作,才能達到你想要的效果,而這些在介面中都會自動處理。你很可能有些地方忽略了。

「這不僅僅是快照。我只是舉個簡化的例子。」我可能會想使用 https://www.rsync.net/products/zfsintro.html,或者我可能想要在本地進行 zsend/receive,例如將我的 raidz2 遞迴複製到一個大型單一硬碟(本地)。後者在 UI 中並不支援,並且還會產生無法刪除的殘留檔案。但上面其實是一個更一般性的問題:如果不能使用 zfs 工具,為什麼要開放存取?要嘛就明確警告終端用戶不要使用(就像你現在這樣),要嘛就提供某種技術說明,說明如何清理任何 QNAP 對 zfs 的增強功能,這些增強功能會導致它無法正常運作。當我購買 QNAP 時,我很欣賞他們採用 zfs,並且我沒有看到太多關於它在命令列下「受限」使用的說明。

1個讚

我不知道,也許有人覺得我很奇怪,但對我來說,擁有 NAS 的整個理由就是讓事情變得更簡單。

其實,直接買一台高效能的 i9 ultra 電腦,裝上 Linux,加一張 RAID 卡和 GPU,這樣的成本會低很多,運算能力也更強。然後裝滿硬碟,你就有了一台自製的 NAS。你想要的所有指令列操作都能做到,而且花的錢還少很多,可能會少花一千到一千五百美元。

對我來說,NAS 的重點就是用它提供的 UI 和介面,這樣我就不用擔心指令列上的東西能不能運作。

當然,我並不反對你的觀點:如果 QNAP 有提供 ZFS 工具,那它們就應該能正常運作。我只是想說,也許你還漏掉了某個步驟。

有兩則帖子被分割到新主題:Snapshot Probleme

為了說明清楚,快照會顯示在 UI 中的資料夾下,而不是在卷(volume)下。zpool1/zfs21 會對應到一個資料夾,所以如果你在 UI 中刪除那個資料夾,就會同時刪除所有與之相關的快照。UI 刪除資料夾的方式擁有比你即使在 CLI 下使用 uid 0 還要更高的權限。然而,用這種方式「修復」的話,代表你會失去該資料夾中的所有資料,因此你應該先備份。這正是他們實作方式的根本問題:只要有人或「任何東西」犯錯,你就必須刪除並重新開始。

嗨,
@NA9D 我的問題是,UI 和實際情況不同步。
在 UI 裡快照並不可見,但用 “zfs list -t snapshot” 檢查時卻存在。
這些快照佔用了大約 60% 的儲存空間,導致儲存空間 100% 滿(這是已知問題)。
但我無法通過 UI 或 CLI 來修復。

我開了一個工單,支援多次提供了像 “zfs destroy …” 這樣的 CLI 指令,但都以 “Permission denied” 結束。
他們通過 helpdesk 應用程式的遠端存取找來了二線支援。
支援做了一些我不清楚的操作,但

  • 快照已經消失
  • 儲存空間回到 30% 使用量

希望能獲得相關資訊。

br

Thomas

1個讚