Kernel

rootfs 分區上沒有剩餘空間可用於升級核心

  • October 5, 2017

我想將Linux核心從. 不幸的是,由於分區上沒有空間,我執行安裝失敗。還剩117MB ,需要**174MB3.16``4.3``aptitude install linux-image-4.3.0-1-amd64``rootfs

我沒有舊核心要刪除以釋放更多磁碟空間(我現在正在使用的除外):

root@host:/# aptitude search linux-image | grep ^i
ip  linux-image-3.16.0-4-amd64      - Linux 3.16 for 64-bit PCs

我嘗試使用,來釋放空間,但它沒有幫助,因為它是一個單獨的分區。AFAIK 這些命令會刪除目錄的內容,因此無濟於事。aptitude clean``apt-get autoremove``/var``/var/cache/apt/archives

我考慮過暫時mount --bind / /home/rootfs(如建議here),但rootfs可能無法安全地重新安裝

我的文件系統磁碟空間使用情況:

root@host:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda6       454M  310M  117M  73% /
udev             10M     0   10M   0% /dev
tmpfs           1,6G   19M  1,6G   2% /run
/dev/sda7        23G   13G  8,8G  59% /usr
tmpfs           3,9G   52M  3,9G   2% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           3,9G     0  3,9G   0% /sys/fs/cgroup
/dev/sda4       250G  187G   64G  75% /media/Windows/C
/dev/sda5       500G  428G   73G  86% /media/Windows/D
/dev/sda2        96M   25M   72M  26% /boot/efi
/dev/sda8       7,3G  966M  5,9G  14% /var
/dev/sda9        14G   37M   13G   1% /tmp
/dev/sda11      126G   95G   25G  80% /home
tmpfs           797M   20K  797M   1% /run/user/112
tmpfs           797M   24K  797M   1% /run/user/1000

du -mx / | sort -n結果:連結

作業系統版本:

root@host:/# cat /etc/debian_version 
stretch/sid

/boot內容:

root@host:/# du -sh /boot/*
156K    /boot/config-3.16.0-4-amd64
25M     /boot/efi
8,8M    /boot/grub
16M     /boot/initrd.img-3.16.0-4-amd64
16M     /boot/initrd.img-3.16.0-4-amd64.old-dkms
2,6M    /boot/System.map-3.16.0-4-amd64
3,0M    /boot/vmlinuz-3.16.0-4-amd64
  • 是否有任何聰明且安全的方法來釋放rootfs分區或暫時將目前核心移動到另一個分區?
  • 將一些rootfs內容移動到另一個分區並創建指向它們的符號連結是否安全?

我知道有很多類似的問題,但其中大多數最終都會刪除我沒有的舊核心。

450MB 對於現代 amd64 系統上的 root+boot 分區來說並不多。如果你想安裝多個核心,你將不得不重新組織你的分區。即使你不這樣做,它也很緊。

鑑於您現在擁有的分區,我建議將根分區移至 now /var。由於您要移動根分區,因此請從應急媒體(例如SystemRescueCD)啟動。安裝/dev/sda6and /dev/sda8,對/media/sda6and說/media/sda8。然後:

  1. 創建/var目錄:mkdir /media/sda8/var
  2. 將舊/var分區中的所有內容移動到這個新子目錄:(mv /media/sda8/* /media/sda8/var/var跳過其本身)
  3. 將除/boot舊根分區以外的所有內容移至舊 var 分區:mv /media/sda6/[^bv]* /media/sda6/bin /media/sda8/
  4. 舊的根分區上應該只有/boot一個空的。/var將所有內容從/boot分區的根目錄移動:mv /media/sda6/boot/* /media/sda6
  5. 刪除虛假目錄:rmdir /media/sda6/boot /media/sda6/var並創建一個現在需要的目錄:mkdir /media/sda8/boot
  6. 編輯fstab文件(現在在 中/media/sda8/etc/fstab),刪除 的條目/var,添加一個的條目,並在必要時/boot更正條目。/
  7. 更新引導載入程序配置。讓它正確的簡單方法是執行update-grub腳本(重新生成grub.cfg)和grub-install(重新生成第一階段引導載入程序,以便它知道在哪裡可以找到其餘部分,包括grub.cfg)。但要做到這一點,您需要為其提供正確的目錄樹。
mount --rbind /dev /media/sda8/dev
mount --rbind /proc /media/sda8/proc
mount --rbind /sys /media/sda8/sys
mount --bind /media/sda6 /media/sda8/boot
chroot /media/sda8
mount /usr
update-grub
grub-install /dev/sda

現在重新啟動。

或者,您可以/boot移至/var; 但這是一種不太常見的配置,因此您可能需要調整一些引導載入程序配置文件。

這些天來,分開/usr/毫無意義的。分離從來/var沒有/真正有用過(它們都需要在大多數設置上以讀寫方式安裝)。

將來,我建議對 Linux 分區使用 LVM。它更加靈活。

引用自:https://unix.stackexchange.com/questions/254416