用於在 tmpfs 上掛載壓縮資料夾的 Initramfs-tools 腳本

用於在 tmpfs 上掛載壓縮資料夾的 Initramfs-tools 腳本

我正在嘗試為具有專用硬體的筆記型電腦創建一個小型救援分區(在所有其他系統和儲存分區之後大約有800MB 的備用空間),該筆記型電腦需要特殊的核心和核心模組,這樣Clonezilla Live 和GParted Live 等庫存救援工具就不需要了效果很好。該分區太小,無法包含我想要建立的模組和軟體,因此系統的大部分內容需要在運行時壓縮並載入到 RAM 中。此外,我更喜歡完全提取系統而不是依賴squashfs,並且我希望能夠在分區允許的情況下保存對系統所做的更改。使用Ubuntu 20.04作為基礎系統,我為此設計了以下方案:

  1. 在 中建置初始系統後chroot,建立並清空資料夾作為運行時存放解壓縮的系統和使用者檔案的/ram掛載點,移動所有系統和使用者資料夾( , , , , ,tmpfshomeusrvaroptetcETC。) 並將/ram其替換為指向 的符號連結/ram/$dir。壓縮/ramas並保留/ram.tar.gz特殊安裝點(、、、dev和)以及單獨開啟。刪除並將其寫入分割區。sysruntmpprocbootrootfs/ram/*rootfs
  2. 啟動時,initrd載入 kernel 和 後, premount rootfs, mount tmpfson /ram,然後將 的內容提取/ram.tar.gz/ram。這必須在rootfs替換initramfs為 root 之前發生,否則rootfs無法存取安裝壓縮/ram存檔和從壓縮存檔中提取所需的實用程式。
  3. 安裝rootfs並繼續啟動。
  4. 關機時,備份/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

相關內容