啓動一個 Fedora Live CD

做爲使用 DVD 和 USB 驅動器來存儲你的 Live CD 鏡像是一個替代方案,你能夠上傳它們到一個不太可能丟失或損壞的 iSCSI 服務器中。這個指南向你展現如何加載你的 Live CD 鏡像到一個 ISCSI 服務器上,並使用 iPXE 啓動加載程序來訪問它們。

Live CD 對於不少任務是頗有用的,例如:html

將操做系統安裝到一個硬盤驅動器
修復一個啓動加載程序或執行其它救援模式操做
爲 Web 瀏覽提供一個相適應的最小環境
…以及更多的東西。linux

下載一個 Live CD 鏡像git

$ MY_RLSE=27
$ MY_LIVE=$(wget -q -O - https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/$MY_RLSE/Workstation/x86_64/iso | perl -ne '/(Fedora[^ ]*?-Live-[^ ]*?\.iso)(?{print $^N})/;')
$ MY_NAME=fc$MY_RLSE 
$ wget -O $MY_NAME.iso https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/$MY_RLSE/Workstation/x86_64/iso/$MY_LIVE

上面的命令下載 Fedora-Workstation-Live-x86_64-27-1.6.iso Fedora Live 鏡像,並保存爲 fc27.iso。更改 MY_RLSE 的值來下載其它檔案版本。或者,你能夠瀏覽 https://getfedora.org/ 來下載最新的 Fedora live 鏡像。在 21 以前的版本使用不一樣的命名約定,必需在這裏手動下載。若是你手動下載一個 Live CD 鏡像,設置 MY_NAME 變量爲不帶有擴展名的文件的基本名稱。用此方法,下面部分中命令將引用正確的文件。bash

轉換 Live CD 鏡像服務器

使用 livecd-iso-to-disk 工具來轉換 ISO 文件爲一個磁盤鏡像,並添加 netroot 參數到嵌入的內核命令行:網絡

$ sudo dnf install -y livecd-tools
$ MY_SIZE=$(du -ms $MY_NAME.iso | cut -f 1)
$ dd if=/dev/zero of=$MY_NAME.img bs=1MiB count=0 seek=$(($MY_SIZE+512)) 
$ MY_SRVR=server-01.example.edu 
$ MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR}) 
$ MY_LOOP=$(sudo losetup --show --nooverlap --find $MY_NAME.img) 
$ sudo livecd-iso-to-disk --format --extra-kernel-args netroot=iscsi:$MY_SRVR:::1:iqn.$MY_RVRS:$MY_NAME $MY_NAME.iso $MY_LOOP 
$ sudo losetup -d $MY_LOOP

上傳 Live 鏡像到你的服務器併發

在你的 ISCSI 服務器上建立一個目錄來存儲你的 live 鏡像,隨後上傳你修改的鏡像到其中。app

對於 21 及更高發布版本:ssh

$ MY_FLDR=/images 
$ scp $MY_NAME.img $MY_SRVR:$MY_FLDR/

對於 21 之前發佈版本:工具

$ MY_FLDR=/images 
$ MY_LOOP=$(sudo losetup --show --nooverlap --find --partscan $MY_NAME.img) 
$ sudo tune2fs -O ^has_journal ${MY_LOOP}p1 
$ sudo e2fsck ${MY_LOOP}p1 
$ sudo dd status=none if=${MY_LOOP}p1 | ssh $MY_SRVR "dd of=$MY_FLDR/$MY_NAME.img" 
$ sudo losetup -d $MY_LOOP

定義 iSCSI 目標

在你的 iSCSI 服務器上運行下面的命令:

$ sudo -i 
# MY_NAME=fc27 
# MY_FLDR=/images 
# MY_SRVR=`hostname` 
# MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR}) 
# cat << END > /etc/tgt/conf.d/$MY_NAME.conf 

    backing-store $MY_FLDR/$MY_NAME.img
    readonly 1
    allow-in-use yes 
 
END 
# tgt-admin --update ALL

建立一個可啓動 USB 驅動器

iPXE 啓動加載程序有一個 sanboot 命令,你可使用它來鏈接並啓動託管於你 ISCSI 服務器上運行的 live 鏡像。它能夠以不少不一樣的格式編譯。最好的工做格式依賴於你正在運行的硬件。例如,下面的說明向你展現如何在一個 USB 驅動器上從 syslinux 中 鏈式加載 iPXE。

首先,下載 iPXE,並以它的 lkrn 格式構建。這應該做爲一個工做站上的普通用戶完成:

$ sudo dnf install -y git 
$ git clone http://git.ipxe.org/ipxe.git $HOME/ipxe 
$ sudo dnf groupinstall -y "C Development Tools and Libraries"
$ cd $HOME/ipxe/src 
$ make clean 
$ make bin/ipxe.lkrn 
$ cp bin/ipxe.lkrn /tmp

接下來,準備一個帶有一個 MSDOS 分區表和一個 FAT32 文件系統的 USB 驅動器。下面的命令假設你已經鏈接將要格式化的 USB 驅動器。注意:你要格式正確的驅動器!

$ sudo -i 
# dnf install -y parted util-linux dosfstools 
# echo; find /dev/disk/by-id ! -regex '.*-part.*' -name 'usb-*' -exec readlink -f {} \; | xargs -i bash -c "parted -s {} unit MiB print | perl -0 -ne '/^Model: ([^(]*).*\n.*?([0-9]*MiB)/i && print \"Found: {} = \$2 \$1\n\"'"; echo; read -e -i "$(find /dev/disk/by-id ! -regex '.*-part.*' -name 'usb-*' -exec readlink -f {} \; -quit)" -p "Drive to format: " MY_USB
# umount $MY_USB? 
# wipefs -a $MY_USB 
# parted -s $MY_USB mklabel msdos mkpart primary fat32 1MiB 100% set 1 boot on 
# mkfs -t vfat -F 32 ${MY_USB}1

最後,在 USB 驅動器上安裝並配置 syslinux ,來鏈式加載 iPXE:

# dnf install -y syslinux-nonlinux 
# syslinux -i ${MY_USB}1 
# dd if=/usr/share/syslinux/mbr.bin of=${MY_USB} 
# MY_MNT=$(mktemp -d) 
# mount ${MY_USB}1 $MY_MNT 
# MY_NAME=fc27 
# MY_SRVR=server-01.example.edu 
# MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR}) 
# cat << END > $MY_MNT/syslinux.cfg
ui menu.c32
default $MY_NAME
timeout 100
menu title SYSLINUX
label $MY_NAME
    menu label ${MY_NAME^^}
    kernel ipxe.lkrn
    append dhcp && sanboot iscsi:$MY_SRVR:::1:iqn.$MY_RVRS:$MY_NAME
END 
# cp /usr/share/syslinux/menu.c32 $MY_MNT 
# cp /usr/share/syslinux/libutil.c32 $MY_MNT 
# cp /tmp/ipxe.lkrn $MY_MNT 
# umount ${MY_USB}1

經過簡單地編輯 syslinux.cfg 文件,並添加附加的菜單項,你應該可以使用這同一個 USB 驅動器來網絡啓動附加的 ISCSI 目標。

這僅是加載 IPXE 的一種方法。你能夠直接在你的工做站上安裝 syslinux 。再一種選項是編譯 iPXE 爲一個 EFI 可執行文件,並直接放置它到你的 ESP 中。又一種選項是編譯 iPXE 爲一個 PXE 加載器,並放置它到你的可以被 DHCP 引用的 TFTP 服務器。最佳的選項依賴於的環境

最後說明

若是你以 IPXE 的 EFI 格式編譯 IPXE ,你可能想添加 –filename \EFI\BOOT\grubx64.efi 參數到 sanboot 命令。
可以建立自定義 live 鏡像。更多信息參考建立和使用 live CD。
能夠添加 –overlay-size-mb 和 –home-size-mb 參數到 livecd-iso-to-disk 命令來建立永久存儲的 live 鏡像。然而,若是你有多個併發用戶,你將須要設置你的 ISCSI 服務器來管理獨立的每一個用戶的可寫覆蓋。這與 「如何構建一個網絡啓動服務器,部分 4」 一文所示相似。
Live 鏡像在它們的內核命令行中支持一個 persistenthome 選項(例如, persistenthome=LABEL=HOME)。與通過 CHAP 身份驗證的 iSCSI 目標一塊兒使用,對於中心控制主目錄,persistenthome 選項爲 NFS 提供一個有趣的替代方案。

本文地址:https://www.linuxprobe.com/fedora-live-cd.html

相關文章
相關標籤/搜索