問題

問題

問題

顯然我的根分割區上的磁碟空間不足。在安裝作業系統(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

解決方案的想法:

  1. 調整根分割區的大小。 (再給 root 10 場演出就好了)
  2. 刪除舊的核心版本並希望我不會破壞東西,釋放的 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 天。

自動快照清理任務可以透過兩種方式管理:

  1. cron 調度程序 ( /etc/cron.daily/suse.de-snapper)。
  2. systemd 計時器調度程式(snapper-cleanup.timersnapper-cleanup.servicesystemd 單元)。

預設情況下,使用 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 會對某些事情感到困惑。一定有更簡單的方法來做到這一點。

相關內容