
我正在嘗試為具有專用硬體的筆記型電腦創建一個小型救援分區(在所有其他系統和儲存分區之後大約有800MB 的備用空間),該筆記型電腦需要特殊的核心和核心模組,這樣Clonezilla Live 和GParted Live 等庫存救援工具就不需要了效果很好。該分區太小,無法包含我想要建立的模組和軟體,因此系統的大部分內容需要在運行時壓縮並載入到 RAM 中。此外,我更喜歡完全提取系統而不是依賴squashfs
,並且我希望能夠在分區允許的情況下保存對系統所做的更改。使用Ubuntu 20.04作為基礎系統,我為此設計了以下方案:
- 在 中建置初始系統後
chroot
,建立並清空資料夾作為運行時存放解壓縮的系統和使用者檔案的/ram
掛載點,移動所有系統和使用者資料夾( , , , , ,tmpfs
home
usr
var
opt
etc
ETC。) 並將/ram
其替換為指向 的符號連結/ram/$dir
。壓縮/ram
as並保留/ram.tar.gz
特殊安裝點(、、、dev
和)以及單獨開啟。刪除並將其寫入分割區。sys
run
tmp
proc
boot
rootfs
/ram/*
rootfs
- 啟動時,
initrd
載入 kernel 和 後, premountrootfs
, mounttmpfs
on/ram
,然後將 的內容提取/ram.tar.gz
到/ram
。這必須在rootfs
替換initramfs
為 root 之前發生,否則rootfs
無法存取安裝壓縮/ram
存檔和從壓縮存檔中提取所需的實用程式。 - 安裝
rootfs
並繼續啟動。 - 關機時,備份
/ram.tar.gz
為/ram.tar.gz.bak
然後將修改後的壓縮/ram
到/ram.tar.gz
.這可以使用 來實現systemd
。
顯然,步驟 4 中可能會出現問題,因此步驟 2 需要包含備份的完整性/ram.tar.gz
並在失敗時加載備份,但這應該只是腳本中包含的一些附加命令initramfs-tools
,超出了我的問題的範圍,即:
在不更改的情況下/usr/share/initramfs-tools/init
,如何建立腳本來/etc/initramfs-tools/scripts
完成步驟 2?指令應該很簡單,因為
mount -t tmpfs -o $OPTIONS none /ram
tar xvzf ram.tar.gz
PREREQ
但我對包含腳本的資料夾(init?local?top?bottom?premount?)以及如何使用腳本本身中的標頭有點不知所措。
答案1
事實證明這非常簡單。創造:
/etc/initramfs-tools/scripts/local-bottom/ramfiles
#!/bin/sh
set -e
PREREQ=""
prereqs()
{
echo "${PREREQ}"
}
case "${1}" in
prereqs)
prereqs
exit 0
;;
esac
mount -t tmpfs -o size=100% none ${rootmnt}/ram
tar xvzf ${rootmnt}/ram.tar.gz -C ${rootmnt}
然後
sudo chmod +x /etc/initramfs-tools/scripts/local-bottom/ramfiles
sudo update-initramfs -u