Pie*_*rre 13 debian live-usb persistence
我想通过将 Debian 安装在 USB 闪存驱动器上来随时随地使用 Debian,但我不确定如何使其保存设置并能够安装/更新软件包而不会在重新启动时丢失它们。
因此,我从此链接下载了混合 ISO 映像,并按照常见问题解答中的说明进行操作:
dd if=image.iso of=/dev/sdb bs=4M; sync
Run Code Online (Sandbox Code Playgroud)
此命令通过创建一个大小与 ISO 映像相同的分区(8GB 中的 1.3 GB)将映像复制到闪存驱动器,并且闪存驱动器的其余部分未分配。
我搜索了如何做到这一点,但每个教程都使用不同的方法,其中一些已经过时并谈论旧的 usb-hdd 映像。
那么我应该如何在闪存驱动器上安装这个混合映像?
我应该如何分区我的闪存驱动器才能安装软件包和保存设置?以及如何在不使用的情况下安装此映像dd
?
F. *_*uri 11
www.debian.org/CD/live/
来自 SE 站点(标准直播):
wget https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-10.0.0-amd64-standard.iso
Run Code Online (Sandbox Code Playgroud)
从自动镜像选择(mate live):
wget http://debian-cd.debian.net/debian-cd/10.0.0-live/amd64/iso-hybrid/debian-live-10.0.0-amd64-mate.iso
Run Code Online (Sandbox Code Playgroud)
然后校验和你下载文件https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/SHA256SUMS ...
好的,ISO 文件系统是只读的,但有一些解决方法:我们可以通过这种方式替换非重要的bootparampersistence
。
您可以通过sed
用于替换二进制字符串来更改它们。
LANG=C sed 's/splash quiet/persistence /;s/quiet splash/persistence /' \
</tmp/debian-live-10.0.0-amd64-mate.iso \
>/tmp/debian-live-10.0.0-amd64-mate-persist.iso
Run Code Online (Sandbox Code Playgroud)这将通过严格替换或by ,在任何地方创建您的实时二进制文件的修改副本。好的,这只有在grub 引导命令确实包含这两个词时才有效。splash quiet
quiet splash
persistence
但注意不要错过持久化后的空间:
"splash quiet" -> 12 characters
"persistence " -> 12 characters
Run Code Online (Sandbox Code Playgroud)
否则你的二进制文件将被破坏。
dd if=debian-live-10.0.0-amd64-standard-persist.iso of=/dev/sdX
Run Code Online (Sandbox Code Playgroud)
然后添加您的第三个分区以进行持久化:
fdisk /dev/sdX
n # new partition
p # primary
<Return> # default: 3
<Return> # default: next free sector
<Return> # default: last addressable sector
w # write and quit
Run Code Online (Sandbox Code Playgroud)
这可以在没有交互的情况下运行:
fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
Run Code Online (Sandbox Code Playgroud)
格式化并准备持久性union
:
mkfs.ext4 -L persistence /dev/sdX3
mount /dev/sdX3 /mnt
echo '/ union' >/mnt/persistence.conf
sync
umount /mnt
Run Code Online (Sandbox Code Playgroud)
然后弹出并尝试!
如果你使用官方的、未修改的镜像,为了使用持久化,你必须中断引导选择:
一旦菜单显示屏幕中,选择你的启动选项,然后代替Return,命中Tab。
将显示内核命令行,然后persistence
在最后一个单词 ( quiet
)之后添加一个空格,然后点击Return。
不幸的是,由于第一个分区与 UEFI 捆绑在一起并且是 ISO,因此您无法修改引导命令。
你只需要添加persistence
到引导命令行,但没有别的!?有一种方法,使用 FAT 和syslinux
,但是你有很多数据操作。它很长,我觉得这不太好。我更喜欢:
更规律,但更长一点(至少对于第一张图片),
注意:所有这些东西都是在root用户下完成的(这必须通过 using 来工作fakeroot
,但这在那里和今天都没有测试过)。
apt install live-build
Run Code Online (Sandbox Code Playgroud)
...以及所有建议。
我写了一个XARGS
删除注释行的小函数:
XARGS() { sed -ne '/#/d;s/ \t//g;H;${x;s/\n/ /g;s/^ //;p}'; }
Run Code Online (Sandbox Code Playgroud)
第一个设置bootparams
,带有本地化和持久性参数:
ExtraBootParams=$(XARGS <<eobp
boot=live
config
locales=ed_WT
keyboard-layouts=ed
keyboard-variant=wt
persistence
eobp
)
Run Code Online (Sandbox Code Playgroud)
现在你的包裹清单:
PackageList=$(XARGS <<-eopl
gnome
gnome-core
# gnome-full
# debian-forensics
debian-installer-launcher
eopl
)
Run Code Online (Sandbox Code Playgroud)
第一步lb
:创建初始树:
lb config --architectures amd64 -d buster --debian-installer-gui \
true --archive-areas 'main contrib non-free' \
--bootappend-live "$ExtraBootParams"
Run Code Online (Sandbox Code Playgroud)
现在,你有一棵小树,你可以:
printf "%s\n" > config/package-lists/standard.list.chroot \
$Packages $PackageList
Run Code Online (Sandbox Code Playgroud)
好的,下一个命令需要很长时间!(在我的主机上大约 1 小时)
lb build
Run Code Online (Sandbox Code Playgroud)
如果一切正常,您可能会发现自己的Debian live:
ls -l *.iso
-rw-r--r-- 1 root root 1511817216 sep 7 15:32 live-image-amd64.hybrid.iso
Run Code Online (Sandbox Code Playgroud)该“异混合”图像包含了UEFI两个分区,并在某种程度上实况混合EFI和BIOS可以引导的。
file live-image-amd64.hybrid.iso
live-image-amd64.hybrid.iso: DOS/MBR boot sector; partition 2 : ID
=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsect
or 708, 5696 sectors
Run Code Online (Sandbox Code Playgroud)
您可以简单地放入您的 USB 密钥:(注意:首先确保您的 USB 密钥未安装!)
dd if=live-image-amd64.hybrid.iso of=/dev/sdX
Run Code Online (Sandbox Code Playgroud)
然后添加您的第三个分区以进行持久化:
fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
Run Code Online (Sandbox Code Playgroud)
格式化并准备持久性union
:
mkfs.ext4 -L persistence /dev/sdX3
mount /dev/sdX3 /mnt
echo '/ union' >/mnt/persistence.conf
sync
umount /mnt
Run Code Online (Sandbox Code Playgroud)
弹出并尝试...
为了与根文件系统的引导/
上加密的持久性,必须添加dm-crypt
模块和相关的二进制文件的initrd通过增加设置(初始RAM磁盘),CRYPTSETUP=y
成/etc/initramfs-tools/hooks/
...
我写了一个XARGS
删除注释行的小函数:
XARGS() { sed -ne '/#/d;s/ \t//g;H;${x;s/\n/ /g;s/^ //;p}'; }
Run Code Online (Sandbox Code Playgroud)
第一个设置bootparams
,具有本地化和持久性和 cryptsetup 参数:
ExtraBootParams=$(XARGS <<eobp
boot=live
config
locales=ed_WT
keyboard-layouts=ed
keyboard-variant=wt
persistent=cryptsetup
persistence-encryption=luks
persistence
eobp
)
Run Code Online (Sandbox Code Playgroud)
现在你的包裹清单:
PackageList=$(XARGS <<-eopl
gnome
gnome-core
# gnome-full
# debian-forensics
debian-installer-launcher
eopl
)
Run Code Online (Sandbox Code Playgroud)
以及您的套餐选择:
Packages=$(XARGS <<-eopk
cryptsetup
cryptsetup-initramfs
debian-installer-launcher
firmware-linux-nonfree
firmware-linux-free
less
ssh
# openvpn
# xtightvncviewer
gsmartcontrol
smartmontools
partclone
ntfs-3g
task-gnome-desktop
user-setup
sudo
apt-utils
eopk
)
Run Code Online (Sandbox Code Playgroud)
当然cryptsetup
是必须的!;-)
第一步lb
:创建初始树:
lb config --architectures amd64 -d buster --debian-installer-gui \
true --archive-areas 'main contrib non-free' \
--bootappend-live "$ExtraBootParams"
Run Code Online (Sandbox Code Playgroud)
现在,你有一棵小树,你可以:
printf "%s\n" > config/package-lists/standard.list.chroot \
$Packages $PackageList
Run Code Online (Sandbox Code Playgroud)
好的,接下来的两个命令将花费很长时间!(在我的主机上大约 40')
lb bootstrap ; lb chroot
Run Code Online (Sandbox Code Playgroud)
现在你可以添加你的模块和二进制文件:
echo dm-crypt >> chroot/etc/initramfs-tools/modules
sed '/CRYPTSETUP=/s/^#//;s/=.*/=y/' -i \
chroot/etc/cryptsetup-initramfs/conf-hook
ln -s ../../cryptsetup-initramfs/conf-hook \
chroot/etc/initramfs-tools/hooks/cryptsetup
chroot chroot live-update-initramfs -u
Run Code Online (Sandbox Code Playgroud)
然后运行最后阶段(将花费更多的时间~25'):
lb installer ; lb binary
Run Code Online (Sandbox Code Playgroud)
注意:如果你阅读cryptsetup: WARNING: Couldn't determine root device
,那很好!这意味着cryptsetup安装在您的initrd
.
如果一切正常,您可能会发现自己的Debian live:
ls -l *.iso
-rw-r--r-- 1 root root 1511817216 sep 7 15:32 live-image-amd64.hybrid.iso
Run Code Online (Sandbox Code Playgroud)该“异混合” umage确实包含已为UEFI和现场混合的方式既两个分区EFI和BIOS可以引导的。
file live-image-amd64.hybrid.iso
live-image-amd64.hybrid.iso: DOS/MBR boot sector; partition 2 : ID
=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsect
or 708, 5696 sectors
Run Code Online (Sandbox Code Playgroud)
您可以简单地放入您的 USB 密钥:(注意:首先确保您的 USB 密钥未安装!)
dd if=live-image-amd64.hybrid.iso of=/dev/sdX
Run Code Online (Sandbox Code Playgroud)
使用可用空间添加新的 Linux 分区。
fdisk /dev/sdX <<<$'n\np\n\n\n\nw'
Run Code Online (Sandbox Code Playgroud)
这将使用 USB Key 上的可用空间创建分区 3。
然后准备你的加密分区
cryptsetup -q luksFormat /dev/sdX3
Run Code Online (Sandbox Code Playgroud)
输入密码
cryptsetup -q luksOpen /dev/sdX3 persist
Run Code Online (Sandbox Code Playgroud)
再次输入密码
mkfs.ext4 -L persistence /dev/mapper/persist
mount /dev/mapper/persist /mnt
echo '/ union' >/mnt/persistence.conf
sync
umount /mnt
cryptsetup luksClose persist
Run Code Online (Sandbox Code Playgroud)就这样。
eject /dev/sdX
Run Code Online (Sandbox Code Playgroud)
克隆(按原样复制每个字节,创建一对一副本)是一种从 linux 混合 iso 文件创建引导驱动器(实时驱动器或安装驱动器)的非常简单且可靠的方法。
没有传统的方法可以使克隆的 Debian iso 文件持久化,因为它具有只读文件系统 ISO9660(和只读“分区表”)。
可以(我会说相当简单)使用mkusb从 Debian live iso 文件创建一个持久的实时驱动器。mkusb 支持 Debian 8 或更新版本,您应该使用 mkusb 的当前版本(版本 12.3.3 或更新版本)。
请参阅此链接中的详细信息以在 Debian 中安装 mkusb。
有关于使用 mkusb 制作的持久实时驱动器的提示。
mkusb创建一个分区表和 5 个分区:
bios_grub
分区grub
(在 UEFI 和 BIOS 模式下)ext
持久性分区,您的修改(和文件)存储在其中mkusb会自动进行以下调整:
persistence
(不像persistent
在 Ubuntu 中)persistence
分区 #5 上的标签(casper-rw
与 Ubuntu 不同)persistence.conf
内容/ union
位于分区 #5 顶层的文件。此结构由 bash dus-persistent
shellscript创建,当您使用 mkusb 版本 12 时, alias mkusb-dus
。如果您需要所有详细信息,请安装 mkusb 并阅读 的内容dus-persistent
,或者直接通过phillw.net/isos/linux-tools/mkusb/dus-persistent阅读。
mkusb 的默认设置可用于 Debian 8、9 和 10,并且在 BIOS 模式和 UEFI 模式(但不是安全启动)下启动时,持久活动驱动器将工作。
(在以前的版本 mkusb 12.3.2 中,您必须在 UEFI 模式下的 Debian 10 的“设置”菜单中手动设置“usb-pack-efi”。)
如果您只需要 UEFI 引导闪存驱动器,则根本不需要安装程序。
您只需要使用 FAT32 格式化闪存驱动器并设置启动标志。然后使用您最喜欢的提取工具(如 7zip)提取 ISO 并将其复制到 FAT32 分区。有关更多详细信息,请参阅自己动手。
我用标准的live iso文件(小,无图形桌面环境)验证了这个方法,
debian-live-10.0.0-amd64-standard.iso
Run Code Online (Sandbox Code Playgroud)
因此,通过这种方式,您可以使用 Debian 10(64 位)制作 USB 引导驱动器。它将是实时的,并以 UEFI 模式启动。
现在你有一个仅限实时的 USB 启动驱动器
将单词编辑persistence
到linux
文件中以开头的行的末尾
/path/to/mountpoint/boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)ext2
在未分配的空间(FAT32分区后面)创建一个分区
persistence
在ext2
分区上ext2
分区写入/ union
到文件persistence.conf
的ext2
文件系统
在拔下闪存驱动器或重新启动之前卸载闪存驱动器上的所有分区
现在您拥有了一个带有 Debian 10 的永久实时 USB 驱动器。
从永久实时驱动器中看到的命令输出:
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.8G 0 7.8G 0% /dev
tmpfs 1.6G 9.0M 1.6G 1% /run
/dev/sdb1 4.0G 826M 3.2G 21% /run/live/persistence/sdb1
/dev/loop0 610M 610M 0 100% /run/live/rootfs/filesystem.squashfs
tmpfs 7.8G 0 7.8G 0% /run/live/overlay
/dev/sdb2 11G 38M 11G 1% /run/live/persistence/sdb2
overlay 11G 38M 11G 1% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
tmpfs 7.8G 0 7.8G 0% /tmp
tmpfs 1.6G 0 1.6G 0% /run/user/1000
$ lsb_release -a
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
$ lsblk -fm /dev/sdb
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT SIZE OWNER GROUP MODE
sdb 14.8G brw-rw----
??sdb1 vfat USBBOOT 7176-C538 3.2G 20% /usr/lib/live/mount/persistence/sdb1 4G brw-rw----
??sdb2 ext2 persistence 2b324439-d63e-4a19-bf57-d49ecb881828 10G 0% /usr/lib/live/mount/persistence/sdb2 10.8G brw-rw----
Run Code Online (Sandbox Code Playgroud)
您可以看到,大小overlay
与/dev/sdb2
其中的大小匹配表明持久性正在工作。
mkusb-minp
(BIOS/UEFI)可以(我会说相当简单)使用mkusb-minp从 Debian live iso 文件创建一个持久的 live 驱动器。mkusb-minp支持 Debian 10 或更新版本。这个简单的shellscript是从mkusb-min开发的。他们都在克隆过程中“系上安全带”,以帮助避免写入错误的设备。
这是一个不错的选择,如果您不想通过 PPA 添加软件或一般只想使用您可以理解的工具。
为什么不选择 USB 设备而不是 HDD 作为目标来重新安装 Debian?你的USB有多大容量?
我安装了 Debian LXDE,并在 4GB USB 记忆棒中运行,可以随时更新系统并在需要时安装软件包。
归档时间: |
|
查看次数: |
29173 次 |
最近记录: |