如何在磁盘/硬盘上持续更改的USB驱动器上创建实时系统

我试图在持续更改的USB驱动器上安装Ubuntu。 但是我想出于各种原因(性能,空间)将更改写入HDD而不是USB。

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

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

编辑2015-07-14:

谢谢你到目前为止的答案。 它们非常有趣,可以帮助我们更好地理解“实时系统持久保存function”的机制,并展示解决问题的好方法。 不幸的是,当我提出有关访问主机系统和/或访问新硬件的问题时,我试图克服一些限制,我没有明确说明(对不起)。

如果分区是一个选项,我认为这里所说的答案是非常好的,因为它只需要你创建一个新的分区,标记它casper-rw并且你已经完成了(工作很好,我测试了它)。

如果购买新硬件是一种选择,我们会想到usb3.0闪存驱动器(MLC或SLC),便携式硬盘驱动器,eSATA和其他选项,其性能远远高于普通的USB2.0闪存驱动器。

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

这样就可以很容易地将casper-rw文件复制回闪存驱动器并再次使用它或将其移动到另一台计算机,从而获得极大的灵活性,对硬盘进行最小的更改并轻松删除对系统。

您可以轻松地将可写文件系统(在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。 如果你还在“持久性”的同一行添加“toram”字,慢速USB上的压缩文件系统将被复制到ram并提供更好的性能,但是,似乎存在关闭问题,FAT分区没有干净地卸下(这似乎没有引起任何问题,但……)

如果您使用以下设置,这非常容易:

  1. 在SLC USB记忆棒上安装Ubuntu(如果您的硬件支持,则首选USB 3.0),没有任何casper东西(只需正常安装,将USB记忆棒视为SSD。)

    为什么? SLC的价格是MLC的两倍,但它们的速度提高了4倍,持续时间长了8倍! 所以他们真的是棒上的小型固态硬盘!

  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记忆棒上,但文件很少,普通用户的主目录位于硬盘上。

  4. 现在只需插入硬盘并将必要的硬盘信息添加到fstab以自动安装硬盘并添加以下参数:

    nobootwait,nofail

    即使硬盘不存在也允许启动(如果是这种情况,只有管理员用户才能访问,而不是普通用户)

  5. 现在以admin用户身份登录,并将普通用户的主目录从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年左右了,还在运行!)