完畢! :-)

完畢! :-)

我試圖在 USB 驅動器上即時安裝 Ubuntu,並進行持續更改。然而,出於各種原因(效能、空間),我想將變更寫入 HDD 而不是 USB。

我發現,這些變更是在系統安裝的 ext3 檔案系統(casper-rw)的檔案中處理的。但它似乎在啟動時在閃存驅動器上自動檢測到。

如何在 HDD 上建立新的 casper-rw 檔案並將 USB 磁碟機上的 Ubuntu live 系統重新路由到 HDD?

2015年7月14日編輯:

感謝您到目前為止的回答。它們非常有趣,有助於更好地理解「即時系統持久保存功能」的機制,並展示解決問題的好方法。不幸的是,當我詢問有關存取主機系統和/或存取新硬體的問題時,我試圖克服我沒有明確說明的一些限制(對此感到抱歉)。

如果分區是一種選擇,我認為答案已說明這裡非常好,因為它只需要您建立一個新分割區,將其標記為 casper-rw 就完成了(工作很棒,我測試了它)。

如果可以選擇購買新硬件,我們會想到 USB3.0 閃存驅動器(MLC 或 SLC)、便攜式 HDD、eSATA 和其他選項,它們的性能比普通 USB2.0 閃存驅動器好得多。

所以我想知道是否有一種方法可以只創建一個 casper-rw 文件,而不是在訪問受限的磁碟上創建一個分區(或複製/鏈接閃存驅動器上的分區)。

這樣,就可以輕鬆地將casper-rw 文件複製回閃存驅動器並從那裡再次使用它或將其移動到另一台計算機,從而提供極大的靈活性,對HDD 進行最小的更改,並輕鬆刪除對硬碟所做的更改系統。

答案1

如果您使用以下設置,這將非常簡單:

  1. 在以下計算機上安裝 UbuntuSLC USB 棒(如果您的硬體支持,則首選 USB 3.0),無需任何 casper 內容(只是正常安裝,將 USB 記憶棒視為 SSD。)

    為什麼?SLC 的價格是 SLC 的兩倍MLC但速度提高了 4 倍,使用壽命延長了 8 倍! 所以它們確實是一根棒子上的小型 SSD!

  2. 優化系統,將USB當做一個小SSD,這樣:

    在您的/etc/sysctl.conf添加中:

    # Fabby: change the "swappiness" to 10 to prevent swapping as much as possible
    # to not wear out the USB stick as the Ubuntu default is optimized for a server.
    # 10 to balance with vfs_cache_pressure
    vm.swappiness = 10
    
    # Fabby: Lower vfs_cache_pressure to 75% 
    # (once cached, probably not immediately needed any more)
    #
    # This percentage value controls the tendency of the kernel to reclaim
    # the memory which is used for caching of directory and inode objects.
    #
    # At the default value of vfs_cache_pressure=100 the kernel will attempt to
    # reclaim dentries and inodes at a "fair" rate with respect to pagecache and
    # swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
    # to retain dentry and inode caches.
    vm.vfs_cache_pressure = 75
    
    # Fabby: Good to improve sequential reads (stop stuttering in movie play)
    # Can also be implemented per disk using udev rules
    vm.max-readahead=2048
    vm.min-readahead=1024
    

    在你的/etc/fstab添加粗體參數到你的啟動USB線。 (可能是sdcsdd。下面是一個範例,如果可能的話使用 UID)

    /dev/sdc / ext4 defaults,noatime,discard,errors=remount-ro 0 1

  3. 建立 2 個用戶:一個管理員用戶,其主目錄位於 USB 記憶棒上,但檔案很少;另一個普通用戶將會有它在 HDD 上的主目錄。

  4. 只有現在插入硬碟並將必要的硬碟資訊新增至fstab自動安裝硬碟並新增以下參數:

    nobootwait,nofail

    即使硬碟不存在也允許啟動(如果是這種情況,只有管理員用戶才能訪問,而普通用戶則無法訪問)

  5. 現在以管理員使用者身分登入,並將普通使用者的主目錄從 USB 隨身碟移至 HDD:

cp --preserve=all /home/NormalUser/* /media/ExternalHDD/NormalUser

如果一切正常:

rm --recursive --force /home/NormalUser/*
cd /home
ln --symbolic /media/ExternalHDD/NormalUser

完畢! :-)

鄭重聲明:我有一個 16GB USB 2.0 MLC 棒,就像這樣(對於我的用例來說已經足夠了,而且不太貴,它已經有大約 5 年的歷史了,仍在運行!)

答案2

您可以輕鬆地將即時媒體的可寫入檔案系統(在 casper-rw 檔案中)放到硬碟上。限制是 casper-rw 檔案必須位於 FAT 分割區上。較新的機器 (UEFI) 都有 FAT EFI 分割區,但通常太小,無法容納 1G-4G casper-rw 檔案。在另一個足夠大的 FAT 分割區上,您可以建立目錄,每個目錄都保存一個 casper-rw 文件,用於可能不同的即時媒體。假設 sda11 大小為 10G,有一個 10G 的 FAT 檔案系統,掛載在 /mnt/sda11,其中有目錄 /A 、 /B 、 /C 、 /D 和 /E 。假設我們將使用 /A 作為持久媒體,並在那裡放置 casper-rw。

cd /mnt/sda11/A
dd if=/dev/zero of=casper-rw bs=1M  count=4096
mkfs.ext4 -F -O^has_journal -L casper-rw casper-rw

取得使用持久性創建的即時媒體,並編輯 /boot/grub/grub.cfg 文件和 /syslinux/txt.cfg 文件,在「持久性」一詞後面添加

"persistent-path=/A"

/boot/grub/grub.cfg ...

menuentry "Try Ubuntu without installing" {
    set gfxpayload=keep
    linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- cdrom-detect/try-usb=true noprompt persistent persistent-path=/A
    initrd  /casper/initrd.lz
}

/syslinux/txt.cfg

default live
label live
menu label ^Try Ubuntu without installing
kernel /casper/vmlinuz.efi
append noprompt cdrom-detect/try-usb=true persistent persistent-path=/A file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash ---
label live-install
...

就是這樣。您甚至不需要重新命名/刪除 USB 媒體上的 casper-rw 檔案。


如果 USB 媒體上有空間,您甚至可以將硬碟的 casper-rw 複製回 USB,並隨身攜帶所做的更改。


持久路徑不允許任何明確磁碟引用,因此在所有 FAT 分割區中應該是唯一的。使用 1 或 2 個 FAT 分割區(其中一個是 EFI 分割區)進行測試。不適用於 ext2 或 ntfs 檔案系統(而非 FAT)。如果您還在“持久”同一行添加“toram”一詞,則慢速 USB 上的壓縮檔案系統將複製到 RAM 中並提供更好的效能,但是,FAT 分割區似乎存在關閉問題沒有完全卸載(這似乎不會造成任何問題,但是......)

相關內容