如何在USB驱动器上创建实时系统并在磁盘/ HDD上进行永久更改


10

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

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

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

编辑2015-07-14:

到目前为止,谢谢您的回答。它们非常有趣,有助于更好地理解“实时系统持久保存功能”的机制,并提供解决问题的好方法。不幸的是,当我问有关主机系统访问和/或对新硬件的访问的问题时,我试图克服一些我没有牢记的限制(对此我很抱歉)。

如果可以选择分区,我认为这里给出的答案非常好,因为它只需要您创建一个新分区,将其标记为casper-rw就可以了(工作很棒,我已经对其进行了测试)。

如果可以选择购买新硬件,那么想到的是USB3.0闪存驱动器(MLC或SLC),便携式HDD,eSATA和其他选件,它们的性能要比普通USB2.0闪存驱动器好得多。

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

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


不知道这是否是一个选项,但是如果您只需要保存数据,则还可以仅将HDD分区挂载到活动文件系统树的某个位置...这样,尽管如此,您在磁盘上只具有特定的文件夹。
字节指挥官

@ByteCommander谢谢您的评论。不幸的是,对硬盘分区不是我的选择,我希望所有内容都尽可能紧凑,以便我可以快速简单地删除数据,因此,将硬盘上的单个文件作为理想选择。
LS 2015年

也应该可以挂载包含文件系统映像的文件(例如,.iso或.img,可能更多)。不幸的是,我从未这样做过,也无法告诉您该怎么做...
Byte Commander

您怎么知道这不起作用?您的文件名为casper-rw吗?它在分区根目录吗?我已经做到了这一点(在具有标记为casper-rw的分区的HDD上使用持久性),而且我不记得有任何其他必要的步骤。
solsTiCe 2015年

您的最新编辑使您的问题过于具体而无法广泛使用(我的回答是...)这不是不可能的,但这意味着创建脚本和udev规则以在插入时将[unmount]-[与HDD同步]-[mount]并在卸载时[与HDD同步],但这是一项繁重的工作,并不真正适合像这样的问答站点。
Fabby

Answers:


4

您可以轻松地将实时媒体的可写文件系统(在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分区)进行了测试。在FAT2或ext2或ntfs文件系统上将不起作用。如果还在“ persistent”的同一行上添加“ toram”一词,则慢速USB上的压缩文件系统将被复制到ram中,并提供更好的性能,但是,FAT分区似乎存在关机问题没有干净地卸载(这似乎不会引起任何问题,但是...)


谢谢。这使事情变得更加清晰。我假设在启动状态下无法识别ntfs(对吗?),因此不可能在ntfs分区上使用casper-rw。因此,我认为我可以选择标记为casper-rw的ext4分区,也可以尝试一些“ toram”或​​ramdrive的东西。
LS

您如何修改grub.cfgsyslinux.txt假定只能以只读方式装载实时媒体,因为它是iso?
solsTiCe

上面使用ISO创建了一个实时媒体USB,可以在上面写入文件。直接引导ISO(例如,从硬盘上引导)使用了一个完全独立的grub(硬盘上的grub),该文件的文件是可编辑的-这种情况下根本不使用ISO的引导机制。
ubfan1 2016年

7

如果使用以下设置,那将非常容易:

  1. 在没有任何Casper东西的情况下将Ubuntu安装在SLC USB记忆棒上(如果您的硬件支持USB 3.0,则最好使用USB 3.0)(只是正常安装,将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
    

    在您的引导USB线中/etc/fstab添加粗体参数。(可能是sdcsdd。以下是示例,请尽可能使用UID)

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

  3. 创建2个用户:这对U盘的主目录,但已经很少文件和普通用户的管理员用户将拥有对硬盘的主目录。

  4. 仅现在插入硬盘,并向您的硬盘中添加必要的硬盘信息,fstab以自动挂载硬盘并添加以下参数:

    nobootwait,nofail

    即使在没有HDD的情况下也允许启动(如果是这种情况,则只有管理员用户可以访问,而普通用户则没有访问权限)

  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年历史了,并且仍在运行!)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.