前文 脫離了廣大機械硬盤和 USB 2.0 羣衆的實際狀況,是不得人心的。下面介紹一種更加符合科學發展觀的定製方法。linux
啓動時,GRUB 或 extlinux 引導 /live/vmlinuz 和 /live/initrd.img, initrd.img 初始化以後會尋找 /live 目錄下以 squashfs ext2 ext3 ext4 xfs jffs2 後綴的文件和以 .dir 爲後綴的目錄,而後將它們 union mount 成根目錄。union filesystem,聯合文件系統是將多個文件夾聯合掛載在一個文件夾下,對聯合目錄的讀寫做用在指定爲 rw 的分支目錄上。bash
#initrd.img/bin/boot/9990-overlay.sh: 69 if [ -n "${addimage_directory}" ] && [ -d "${addimage_directory}" ] 70 then 71 for FILESYSTEM in squashfs ext2 ext3 ext4 xfs jffs2 dir 72 do 73 for IMAGE in "${addimage_directory}"/*."${FILESYSTEM}" 74 do 75 if [ -e "${IMAGE}" ] 76 then 77 image_string="${image_string} ${IMAGE}" 78 fi 79 done 80 done 81 fi
這裏使用工具 unionfs-fuse,相對於 aufs,unionfs 支持在用戶層上,兼容性較好。 Debian 安裝: apt-get install unionfs-fuse
,接着執行:工具
cd /tmp mkdir custom mkdir union mount /path/to/live/filesystem.squashfs /mnt unionfs-fuse -o cow,max_files=32768 -o allow_other,use_ino,suid,dev,nonempty /tmp/custom=RW:/mnt=RO /tmp/union/ #1 cd union mount -o bind /proc proc/ #2 chroot . #3
-o cow,max_files=32768 -o allow_other,use_ino,suid,dev,nonempty
是必需的,要否則文件讀寫方面會出問題。進去了以後,咱們就能夠上下其手,隨心所欲了。操做完成以後,刪除 /tmp/custom 內多餘的目錄和文件,打包:測試
cd /tmp mksquashfs custom/ custom.squashfs cp custom.squashfs /path/to/live/
重啓以後便可看到效果。ui
直接複製 Kali ISO 的內容到U盤的某一分區後,假設是 /dev/sdb2,目錄名是 kaliLive,安裝 extlinux.net
extlinux -i /path/to/kaliLive/
這時 /dev/sdb2 的首 512 字節是 extlinux 的 bootloader。若是你在 /dev/sdb 安裝了 GRUB 2 能夠以:code
set root=(hd0,msdos2) chainloader +1 boot
引導 extlinux。blog
複製+手動安裝 bootloader
的方法會在 kali 1.0.1 下沒法使用 persistence 功能。dd 的方法沒測試過。