網站首頁 編程語言 正文
前言
在一些場合(如開發內核模塊)我們需要安裝多個版本的內核,這時候容易出現boot分區空間不夠的問題,本文介紹如何擴展銀河麒麟(4.0.2)的boot分區。
由于boot分區通常位于磁盤的第一個分區,直接擴展難度較大,因此采取新分區替換原分區的方式間接實現boot分區的擴展。請注意,替換boot分區有風險,請評估完風險后,謹慎操作。
1、準備新的分區
如何是虛擬機,可以直接添加一塊虛擬磁盤,如果是物理機,可以從現有磁盤中清理出一塊未用分區,并用磁盤工具(如parted)格式化。
如果磁盤是msdos格式,新分區須為primary。如何使用磁盤工具,這里不再贅述。假設新分區為/dev/newpart(你的新分區肯定不會叫這個名字),利用mkfs格式化:
mkfs.ext4 /dev/newpart
2、復制boot分區
首先將新分區掛載到某個目錄,如/mnt:
mount /dev/newpart /mnt
然后將/boot中的所有文件復制到掛載的目錄:
cp –a /boot/* /mnt
3、修改fstab文件
利用命令blkid或者lsblk –f查看新分區的UUID,并記下來。在root權限下修改/etc/fstab文件,將原boot分區對應的分區UUID替換為新分區的UUID,保存退出。重啟前,可以用:
systemctl daemon-reload mount –a lsblk
依次確認配置文件修改正確,新分區能正常加載,重啟系統。重啟的目的是讓系統識別到新的boot分區,然后方便自動更新grub。
4、更新grub
使用update-grub命令更新grub,并打開/boot/grub/grub.cfg確認是從新分區加載內核和驅動,如下圖中黃線標注處應為新分區的UUID。圖中只列出了一個啟動項的內容,如果有多個啟動項,可以逐個檢查下。
但通常如果第一個是正確的,后面的也應該是正確的。
理論上,接下來讓bios或者uefi從新分區啟動就可以了,但遺憾的是通常即使新的分區設置了boot屬性為on,在引導時也不一定能從新分區啟動(也可能是我操作的問題)。為了解決這個問題,我們仍然保留原來被替換掉的引導分區,而且
將新的grub配置文件復制到原分區的grub目錄下。這樣操作系統仍然會從原來的引導分區啟動,但由于新的grub配置文件將內核和驅動文件的位置指向了新的磁盤分區,所以原有分區下的內核和驅動文件就可以刪除了,boot分區空間不足的
問題就解決了。假設原boot分區掛載在/dev/oldpart下,重新掛載原分區實現grub.cfg文件的復制:
mount /dev/oldpart /mnt cp /boot/grub/grub.cfg /mnt/grub/
查看/mnt/grub/grub.cfg,確認一切正確后,此時可以重啟操作系統了。引導后,可以在grub引導界面里進到相應的啟動項中進一步確認boot分區更換的正確性。
如果引導一切正常,進入系統后,可以通過df –h查看新的boot分區的利用率情況。此外,如果想進一步節省磁盤空間,可以刪除掉原boot分區中的內核和驅動文件以。
如果不刪除,也沒有任何影響,因為后續添加新內核等操作都不會用到這個原來的boot分區了。
值得一提的是,如果后續有新的內核加入,在執行完update-grub生成新的/boot/grub/grub.cfg后,不要忘了將該文件復制到原boot分區下的grub目錄中,否則在grub啟動界面中看不到相應的內核。
因為我們仍然是從原分區啟動的,grub啟動界面顯示的是原boot分區中的grub.cfg。
原文鏈接:https://blog.csdn.net/sword__wj/article/details/121607086
相關推薦
- 2022-12-31 一文初探Go語言中的reflect反射包_Golang
- 2024-02-25 layer.open加上時間
- 2023-03-23 Pandas分組聚合之使用自定義函數方法transform()、apply()_python
- 2022-12-08 Apache?Cordova?Android原理應用實例詳解_Android
- 2022-08-28 Go通道channel通過通信共享內存_Golang
- 2021-12-01 C語言多維數組數據結構的實現詳解_C 語言
- 2022-04-20 Python設計模式中的行為型策略模式_python
- 2022-01-01 使用el-date-picker根據開始月份,動態禁用結束月份
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支