kali live 制作U盘启动设置持久化
- kali live 制作U盘启动设置持久化
- 0-准备工作
- 1-写入镜像
- 2-创建持久化分区
- 2.1-不加密
- 2.1.1-创建分区
- 2.1.2-格式化分区(创建文件系统)
- 2.1.3-写入持久化配置文件
- 2.2-加密
- 2.2.1-创建分区
- 2.2.2-加密磁盘
- 2.2.3-打开加密磁盘
- 2.2.4-格式化磁盘
- 2.2.5-设置持久化配置文件
- 2.1-不加密
- 3-其他
- 3.1-其他分区
- 3.2-多持久化分区
- 3.3-自定义持久化目录
- 3.4-分区其他设置
- 参考
本文主要介绍使用U盘制作 kali live 系统,并设置持久化和加密持久化
所谓持久化,即可以保存开机后文件的更改,默认系统重启后将重置。
0-准备工作
制作过程需要 Linux 环境,虽然镜像写入过程可以在 Windows 下完成,但格式化加密等主要工作需要在 Linux 下进行,Windows 下较难完成。
U盘最好大于 8G 不然用于持久化的分区过小。
# 查看usb设备
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 0781:5583 SanDisk Corp. Ultra Fit#查看块设备(磁盘),这里可以知道sdb为U盘,不同系统这里显示可能不同,注意区分,不要误操作,数据无价。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 121.5G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 6.5G 0 part [SWAP]
sdb 8:16 1 57.3G 0 disk
sr0 11:0 1 1024M 0 rom # 下载 kali live 镜像,注意这里需要的是 live boot 镜像,文件名中一般带 live 字样,不能是安装镜像。
$ wget https://cdimage.kali.org/kali-weekly/kali-linux-2025-W41-live-amd64.iso ## 最新链接请至官网查找
$ file kali-linux-2025-W41-live-amd64.iso
kali-linux-2025-W41-live-amd64.iso: ISO 9660 CD-ROM filesystem data (DOS/MBR boot sector) 'Kali Live' (bootable)
1-写入镜像
下述操作涉及磁盘写入,务必慎重,请勿盲目复制命令!!!
下面操作直接将 ISO 以二进制形式写入 U 盘,U 盘所有数据包括分区表都会被覆盖,注意保存数据;该 ISO 镜像使用 hybrid ISO 技术,为了兼容性,写入后 U 盘的分区表将变为 MBR 类型。
##使用 dd 将 iso 镜像写入到 usb 磁盘
##!!!!!
## 不要盲目复制命令,看好磁盘再操作,建议在虚拟机上操作,避免丢失数据。
##!!!!!
$ sudo dd if=./kali-linux-2025-W41-live-amd64.iso of=/dev/sdb conv=fsync bs=4M status=progress
5646850048 bytes (5.6 GB, 5.3 GiB) copied, 140 s, 40.2 MB/s
1346+1 records in
1346+1 records out
5646850048 bytes (5.6 GB, 5.3 GiB) copied, 206.857 s, 27.3 MB/s
写入后应该有两个分区,第一个(sdb1)为 LIVE 系统分区,此分区只读;另一个分区(sdb2)用于 UEFI 环境下的引导。
# 查看写入后的分区
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 121.5G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 6.5G 0 part [SWAP]
sdb 8:16 1 57.3G 0 disk
├─sdb1 8:17 1 5.3G 0 part
└─sdb2 8:18 1 4M 0 part
sr0 11:0 1 1024M 0 rom
至此,USB Kali live 系统已经可以使用,不过数据不能保留在 USB 中,电脑重启后会重置,下面开始将进行数据持久化操作。
2-创建持久化分区
此步创建磁盘分区用于存放持久化数据,live 系统的文件修改将存储在此处;该分区可以选择加密或者不加密,视具体需求而定,下面逐一说明。
2.1-不加密
2.1.1-创建分区
下面的命令可能看起来有点奇怪,其实就是使用分区工具 "fdisk" 创建了一个分区 sdb3。
如果熟练使用 fdisk 或其他工具,以交互式创建更明了,这里不做过多说明。
$ sudo fdisk /dev/sdb <<< $(printf "p\nn\np\n\n\n\np\nF\nw")p # 打印分区表
n # 新建分区
p # 主分区
[回车] # 即\n,默认分区号,按顺序默认是 3
[回车] # 默认起始扇区
[回车] # 默认结束扇区(即用完剩余空间),如果不打算使用所有空间,调整此处
p # 打印分区表
F # 显示剩余空间
w # 写入分区表,即提交上述修改并退出fdisk分区工具,后面没有\n是因为 printf 函数会在末尾自动添加一个回车。
如果不使用所有空闲空间,可以用下面方式控制分区大小,剩余空间可以留作他用,比如再建一个或多个 FAT32/exFAT 分区方便和 Windows 交换数据。
$ sudo fdisk /dev/sdb <<< $(printf "p\nn\np\n\n\n+32G\np\nF\nw")
p # 打印分区表
n # 新建分区
p # 主分区
[回车] # 即\n,默认分区号,按顺序应该是 3
[回车] # 默认起始扇区
+32G # 使用接下来的 32G 空间
p # 打印分区表
F # 显示剩余空间
w # 写入分区表,即提交上述修改并退出fdisk分区工具
创建后分区如下:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 121.5G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 6.5G 0 part [SWAP]
sdb 8:16 1 57.3G 0 disk
├─sdb1 8:17 1 5.3G 0 part
├─sdb2 8:18 1 4M 0 part
└─sdb3 8:19 1 32G 0 part # 持久化分区
sr0 11:0 1 1024M 0 rom
2.1.2-格式化分区(创建文件系统)
对创建的分区格式化,文件系统为 EXT4
# 注意这里 -L 选项设置卷标必须为 persistence ,持久化分区的选择是以卷标为依据的
# kali live 系统默认会选择卷标为 persistence 的分区作为数据持久化分区
$ sudo mkfs.ext4 -L persistence /dev/sdb3
mke2fs 1.47.2 (1-Jan-2025)
Creating filesystem with 8388608 4k blocks and 2097152 inodes
Filesystem UUID: eec8d134-882c-4ddf-87dd-1abc9a4241d8
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
2.1.3-写入持久化配置文件
向根目录写入文件persistence.conf
内容为/ union
,live 系统启动时会搜寻分区根目录查找该文件。
# 创建临时挂载目录
$ sudo mkdir -pv /mnt/my_usb# 挂在分区至目录
$ sudo mount -v /dev/sdb3 /mnt/my_usb
mount: /dev/sdb3 mounted on /mnt/my_usb.# 写入配置文件
$ echo "/ union" | sudo tee /mnt/my_usb/persistence.conf
/ union# 卸载分区
$ sudo umount -v /mnt/my_usb
umount: /mnt/my_usb unmounted
至此 USB 持久化 制作完成,重启电脑调整启动顺序使用 USB 启动,导航至Live system with USB persistence
启动系统即可。
如果有加密需求参见下面操作。
2.2-加密
2.2.1-创建分区
为了方便演示删除前面的sdb3,此步操作是在 dd 写入 ISO 之后,当前仅存在 sdb1 和 sdb2 两个分区
和非加密的一样创建一个分区
$ sudo fdisk /dev/sdb <<< $(printf "p\nn\np\n\n\n\np\nF\nw")
2.2.2-加密磁盘
和非加密不同,此时先不急对 sdb3 格式化,而是使用 LUKS 加密磁盘
$ sudo cryptsetup --verbose --verify-passphrase luksFormat /dev/sdb3 WARNING!
========
This will overwrite data on /dev/sdb3 irrevocably.Are you sure? (Type 'yes' in capital letters): YES ## 输入大写YES
Enter passphrase for /dev/sdb3: ## 密码
Verify passphrase: ## 重复密码
Key slot 0 created.
Command successful.
2.2.3-打开加密磁盘
打开加密盘的过程创建了一个逻辑上没加密的常规磁盘(/dev/mapper/my_usb
),后续操作在这个的磁盘上进行。
# 打开加密盘前,没有 /dev/mapper/my_usb 这个设备
$ ls /dev/mapper
control# 打开加密盘
$ sudo cryptsetup luksOpen /dev/sdb3 my_usb
Enter passphrase for /dev/sdb3: ## 输入前面加密的密码# 此时出现 /dev/mapper/my_usb 这个设备
$ ls /dev/mapper
control my_usb
2.2.4-格式化磁盘
注意此处应该操作解密后的磁盘(/dev/mapper/my_usb
),不能操作原始 /dev/sdb3
这个加密盘。
$ sudo mkfs.ext4 -L persistence /dev/mapper/my_usb
mke2fs 1.47.2 (1-Jan-2025)
Creating filesystem with 8384512 4k blocks and 2097152 inodes
Filesystem UUID: 9ed390ba-3410-4e00-8fab-fc3605e6e20a
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
2.2.5-设置持久化配置文件
向根目录写入文件persistence.conf
内容为/ union
,设置此持久化分区保存所有目录的数据变更。
# 创建临时挂载目录
$ sudo mkdir -pv /mnt/my_usb
# 挂在分区
$ sudo mount -v /dev/mapper/my_usb /mnt/my_usb
mount: /dev/mapper/my_usb mounted on /mnt/my_usb.
# 写入持久化配置文件
$ echo "/ union" | sudo tee /mnt/my_usb/persistence.conf
/ union
# 卸载分区
$ sudo umount -v /mnt/my_usb
umount: /mnt/my_usb unmounted
# 关闭解密
$ sudo cryptsetup luksClose /dev/mapper/my_usb
至此 加密 USB 持久化 制作完成,重启电脑调整启动顺序使用 USB 启动,导航至Live system with USB Encrypted persistence
启动系统,开机过程会要求提供密码。
3-其他
3.1-其他分区
如果持久化分区没有使用所有空闲空间,剩下的空间还可以建立其他分区用于和 Windows 系统数据交换等目的。
建立分区后调整 type 为 07(exFAT),否则 Windows 系统可能无法识别
MBR 分区表只能有四个主分区,所以建议最后一个分区设置为扩展分区(Extended),从而可以建立多个逻辑分区(logical)方便使用。
将分区格式化为 exFAT:
windows 下可以正常识别:
3.2-多持久化分区
由于 MBR 分区表只能有四个主分区,所以至多也就可以做两个持久化分区(加密与否均可),且无法再创建用于和 windows 做数据交换的分区。
系统启动时使用卷标(格式化时候的-L 选项设置)区分不同持久化分区,在启动目录菜单使用Tab
编辑启动参数,设置不同 persistence 分区:
卷标分别设置为 aaa 和 bbb ,格式化为 EXT4 文件系统,并分别写入配置文件。
在 persistence
参数后添加persistence-label=bbb
指定不同分区,默认的持久化分区卷标为persistence
(这也就是为什么前面建立的持久化分区卷标设定为 persistence)。
官网文档最末尾的图演示是错误的:(截图时间20251012)
3.3-自定义持久化目录
在分区根目录设置的persistence.conf
文件是一个配置文件,内容为/ union
表明对 live 中所有文件夹进行持久化,如果不需要所有文件夹均持久化可以在此文件中明确指出具体的目录,比如/home/kali/
,此时只会对 kali 目录下的文件进行持久化保存,其余文件的更改重启后均会被重置。
3.4-分区其他设置
上述制作的 USB 接入 Windows 系统后可能会出现有一个4M左右的分区,由于此分区的 type 为 01(FAT16),在 Windows 下能正常识别显示,但是这个分区最好不要在 Windows 下显示,以免误删其中数据导致 live 系统异常,因此建议将其 type 修改为 11(隐藏的 FAT16)
参考
https://www.kali.org/docs/usb/live-usb-install-with-linux/
https://www.kali.org/docs/usb/usb-persistence/
https://www.kali.org/docs/usb/usb-persistence-encryption/
https://download.csdn.net/blog/column/13045021/151374956