完毕! :-)

完毕! :-)

我尝试在 USB 驱动器上安装 Ubuntu Live 并保留更改。但是,出于各种原因(性能、空间),我想将更改写入 HDD 而不是 USB。

我发现,更改是在系统 (casper-rw) 安装的 ext3 文件系统的文件中处理的。但它似乎在启动时在闪存驱动器上自动检测到。

如何在 HDD 上创建新的 casper-rw 文件并将 USB 驱动器上的 Ubuntu 实时系统重新路由到 HDD?

编辑2015-07-14:

感谢您到目前为止的回答。它们非常有趣,对更好地理解“实时系统持久保存功能”的机制有很大帮助,并展示了解决问题的好方法。不幸的是,我在询问有关访问主机系统和/或访问新硬件的问题时想到了一些限制,我没有明确说明(对此深表歉意)。

如果分区是一种选择,我认为答案是这里非常好,因为它只需要您创建一个新的分区,将其标记为 casper-rw 然后就完成了(工作很棒,我已经测试过了)。

如果可以选择购买新硬件,则可以考虑使用 usb3.0 闪存驱动器(MLC 或 SLC)、便携式硬盘、eSATA 和其他选项,它们的性能远优于普通的 USB2.0 闪存驱动器。

所以我想知道是否有办法只创建一个 casper-rw 文件,而不是在访问权限有限的磁盘上创建一个分区(或者复制/链接闪存驱动器上的分区)。

这样,只需将 casper-rw 文件复制回闪存驱动器并从那里再次使用或将其移动到另一台计算机就很容易了,从而具有极大的灵活性、对 HDD 的更改最少,并且可以轻松删除对系统所做的更改。

答案1

如果您使用以下设置,这将非常简单:

  1. SLC USB 记忆棒(如果您的硬件支持,则最好使用 USB 3.0)没有任何 casper 内容(只是正常安装,将 USB 记忆棒视为 SSD。)

    为什么?SLC 的价格是多层电容器但它们的速度快 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”一词后添加

"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)上不起作用。如果您还在“persistent”的同一行中添加“toram”一词,则慢速 USB 上的压缩文件系统将被复制到 RAM 中并提供更好的性能,但是,似乎存在关机问题,FAT 分区没有被干净地卸载(这似乎不会造成任何问题,但是……)

相关内容