
問題
顯然我的根分割區上的磁碟空間不足。在安裝作業系統(VM 上的 openSUSE Leap 15)時,我選擇了預設分割區。現在我收到警告/錯誤“檔案系統根目錄”上的磁碟空間不足。當我啟動系統時它會警告我,當我嘗試編譯一個大型專案時它會拋出錯誤。
分析
我們來看看儲存情況:
報告檔案系統磁碟空間使用:
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 13G 0 13G 0% /dev
tmpfs 13G 34M 13G 1% /dev/shm
tmpfs 13G 82M 13G 1% /run
tmpfs 13G 0 13G 0% /sys/fs/cgroup
/dev/sda2 40G 38G 2.2G 95% /
/dev/sda2 40G 38G 2.2G 95% /root
/dev/sda2 40G 38G 2.2G 95% /boot/grub2/i386-pc
/dev/sda3 204G 165G 40G 81% /home
/dev/sda2 40G 38G 2.2G 95% /boot/grub2/x86_64-efi
/dev/sda1 500M 5.0M 495M 1% /boot/efi
/dev/sda2 40G 38G 2.2G 95% /usr/local
/dev/sda2 40G 38G 2.2G 95% /srv
/dev/sda2 40G 38G 2.2G 95% /opt
/dev/sda2 40G 38G 2.2G 95% /.snapshots
/dev/sda2 40G 38G 2.2G 95% /tmp
/dev/sda2 40G 38G 2.2G 95% /var
tmpfs 2.6G 20K 2.6G 1% /run/user/462
tmpfs 2.6G 48K 2.6G 1% /run/user/1000
估計文件空間使用:
$ sudo du -hsx /* | sort -rh | head -n 40
[sudo] password for root:
du: cannot access '/proc/8809/task/8809/fd/4': No such file or directory
du: cannot access '/proc/8809/task/8809/fdinfo/4': No such file or directory
du: cannot access '/proc/8809/fd/4': No such file or directory
du: cannot access '/proc/8809/fdinfo/4': No such file or directory
51G /home
5.5G /usr
972M /opt
894M /var
792M /lib
63M /boot
38M /tmp
24M /etc
18M /run
11M /sbin
11M /lib64
2.1M /bin
320K /root
0 /sys
0 /srv
0 /selinux
0 /proc
0 /mnt
0 /dev
$ sudo du -hsx /.snapshots
2.2M /.snapshots
$ sudo du -hs /.snapshots
129G /.snapshots
按照 @Kamil Maciorowsk 建議列出快照:
$ sudo snapper list
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+-----+-------+----------------------------------+------+---------+-----------------------+--------------
single | 0 | | | root | | current |
single | 1 | | Tue 02 Oct 2018 02:42:20 PM CEST | root | | first root filesystem |
pre | 74 | | Mon 08 Oct 2018 03:25:32 PM CEST | root | number | zypp(zypper) | important=yes
post | 75 | 74 | Mon 08 Oct 2018 03:27:17 PM CEST | root | number | | important=yes
pre | 82 | | Tue 16 Oct 2018 09:11:33 AM CEST | root | number | zypp(zypper) | important=yes
post | 83 | 82 | Tue 16 Oct 2018 09:12:04 AM CEST | root | number | | important=yes
pre | 108 | | Thu 01 Nov 2018 01:25:41 PM CET | root | number | zypp(zypper) | important=yes
post | 109 | 108 | Thu 01 Nov 2018 01:27:12 PM CET | root | number | | important=yes
pre | 122 | | Thu 08 Nov 2018 09:26:09 AM CET | root | number | zypp(zypper) | important=yes
post | 123 | 122 | Thu 08 Nov 2018 09:27:40 AM CET | root | number | | important=yes
pre | 128 | | Mon 12 Nov 2018 08:40:03 AM CET | root | number | zypp(zypper) | important=yes
post | 129 | 128 | Mon 12 Nov 2018 08:41:36 AM CET | root | number | | important=yes
pre | 144 | | Mon 19 Nov 2018 09:52:15 AM CET | root | number | zypp(zypper) | important=no
post | 145 | 144 | Mon 19 Nov 2018 09:54:33 AM CET | root | number | | important=no
pre | 146 | | Wed 21 Nov 2018 11:07:33 AM CET | root | number | zypp(zypper) | important=no
post | 147 | 146 | Wed 21 Nov 2018 11:07:56 AM CET | root | number | | important=no
pre | 148 | | Thu 22 Nov 2018 09:19:51 AM CET | root | number | zypp(zypper) | important=no
post | 149 | 148 | Thu 22 Nov 2018 09:19:54 AM CET | root | number | | important=no
pre | 150 | | Mon 26 Nov 2018 09:12:02 AM CET | root | number | zypp(zypper) | important=no
post | 151 | 150 | Mon 26 Nov 2018 09:12:19 AM CET | root | number | | important=no
pre | 152 | | Thu 29 Nov 2018 09:34:37 AM CET | root | number | zypp(zypper) | important=no
post | 153 | 152 | Thu 29 Nov 2018 09:35:22 AM CET | root | number | | important=no
我還聽說過舊的未使用的內核,所以檢查了一下並發現了這個:
$ ls -la /lib/modules
total 0
drwxr-xr-x 1 root root 108 Nov 8 09:29 .
drwxr-xr-x 1 root root 78 Oct 4 16:13 ..
drwxr-xr-x 1 root root 354 Oct 16 09:11 4.12.14-lp150.12.22-default
drwxr-xr-x 1 root root 354 Nov 8 09:26 4.12.14-lp150.12.25-default
解決方案的想法:
- 調整根分割區的大小。 (再給 root 10 場演出就好了)
- 刪除舊的核心版本並希望我不會破壞東西,釋放的 245 MB 目前就足夠了。
我真的很喜歡給根更多的空間,但不知道如何做到這一點,或者是否是一個好主意來搞亂它。您會提出什麼解決方案?
答案1
/dev/sda2
安裝到不同的安裝點(你應該有不同的內容)讓我相信你正在使用 Btrfs。您也/.snapshots
安裝了表明存在的鯛魚。它很可能/.snapshots
佔用了大部分已使用空間。
請注意,您的分析du -hsx /*
甚至沒有考慮/.snapshots
在內,因為*
glob 不會擴展到以 開頭的名稱.
。
我沒有使用 Snapper 的經驗。我懷疑裡面有 Btrfs 子卷(快照)/.snapshots
。該命令du -hsx /.snapshots
甚至可能0
由於-x
使用的選項而返回。另一方面du -hs /.snapshots
可能會返回巨大的價值。它可能比/dev/sda2
( )的大小大得多,40GiB
因為您可能有多個共享磁碟空間的快照(這就是 Btrfs 的工作原理),但仍然du
會將它們視為單獨的檔案系統。
要進一步分析,您需要 Btrfs 特定的和/或 Snapper 工具。我對 Btrfs 有一些經驗,但對 Snapper 沒有。我不知道你是否可以透過手動修改 Snapper 創建的快照來迷惑 Snapper,但有可能;但我確信你無法使用 Snapper 來破壞 Btrfs。因此,安全的方法是使用 Snapper 提供的任何工具來處理這種情況,而不是直接使用 Btrfs 工具。
已經提到的教程給我們一些關於您可以做什麼的提示:
列出預設配置(root)的所有快照
snapper list
刪除快照
刪除預設(根)配置的快照 65:
snapper delete 65
但也:
自動快照清理機制
為了防止磁碟空間已滿,Snapper 會定期清理快照。預設情況下,該時間段 = 1 天。
自動快照清理任務可以透過兩種方式管理:
- cron 調度程序 (
/etc/cron.daily/suse.de-snapper
)。- systemd 計時器調度程式(
snapper-cleanup.timer
和snapper-cleanup.service
systemd 單元)。預設情況下,使用 cron 機制。
也許這個清理機制失敗了?
正如我所說,我沒有使用 Snapper 的經驗,所以我無法為您提供更多幫助。然而,如果我是對的,現在你知道要調查什麼了。總結一下:
- 您完全錯過了
/.snapshots
目錄,很可能它佔據了大部分已用空間; - 可能涉及Btrfs快照;
- Snapper可能也參與其中。
答案2
首先要做的就是備份重要的東西。沿著這條路走下去涉及到做一些可能導致資料遺失的事情。以下是一些選項:
購買新的 USB SATA 硬碟。將 USB SATA 磁碟機替換為機殼中的舊磁碟機。將 Linux 重新安裝到新的 SATA 磁碟機。每當您需要存取舊文件時,只需插入 USB 隨身碟即可。
如果您使用 LVM 進行分割區(SuSE 可能沒有),請查看是否可以擴充 (
lvmresize -L+10G /dev/mapper/whatever
) 斜線分割區,然後調整大小 (resize2fs /dev/mappper/whatever
)。這是最簡單的修復方法。如果您有硬分割區(例如:root 已開啟
/dev/sda1
),那麼您可以嘗試使用 Gparted Live 啟動(https://gparted.org/livecd.php)並試圖擴展你的硬分區。一般來說,這裡的成功取決於驅動器上剩餘多少空閒空間以及您如何分區購買新硬碟。相同容量或更大。將其插入並建立更大的分割區(如果可能,請使用 LVM)。新磁碟上的第一個分割區大小應為 1G(可以更小,只是簡單一點),並且是為了相容於 Grub。然後,啟動到舊磁碟並建立目錄/掛載新磁碟分割區
/mnt/new_disk/
;將所有舊分割區 rsync 到新磁碟上。 (例如:rsync -av / /mnt/new_disk/slash/; rsync -av /usr /mnt/new_disk/usr/;
...)。完成後,您需要以某種方式將 grub 安裝在新磁碟上。我通常使用 chroot into 來執行此操作,/mnt/new_disk/slash/
但這可能會令人畏懼。通常 grub.cfg 會對某些事情感到困惑。一定有更簡單的方法來做到這一點。