JavaScript must be enabled in order for you to see "WP Copy Data Protect" effect. However, it seems JavaScript is either disabled or not supported by your browser. To see full result of "WP Copy Data Protector", enable JavaScript by changing your browser options, then try again.

當Ramdisk的檔案格式遇上PXE


最近剛好碰到關於Ramdisk建置問題,因為客戶把一個貌似Initrd.img的東西拿了過來,好像是先經過CPIO打包後,再用Gzip做壓縮的檔案,問說能不能幫他開起來,後來我直接進到/boot去看,空的!再到/etc/issue那邊欣賞一下,還好客戶這邊還保持原味,發現是用RHEL 6.2 x64的版本Build成的,之後再整個Image裡面去Find也毫無任何Grub執行檔,只好把這個Image拿去PXE那邊試看看,偶然才發現原來有分幾種不同的格式包法,所以廢話不多說,先來介紹有哪些格式來包Initrd,如下:

1) 傳統用CPIO與Gzip的方式來解壓與建置Initrd(如RHEL 5.x~6.1、SLES與Ubuntu等的PXE Ramdisk檔案)
#file initrd.img.gz
initrd.img.gz: gzip compressed data, from Unix, last modified: Fri Nov 30 02:18:32 2012, max compression
#gzip -d initrd.img -> 會因為檔尾沒有gz字樣造成無法解壓
gzip: initrd: unknown suffix -- ignored
#mv initrd{,.gz}
#file initrd.img
initrd.img: ASCII cpio archive (SVR4 with no CRC)
#cpio -iduvc < initrd.img
#find . | cpio -ov > initrd.img
#gzip initrd.img

2) 目前新Distribution均用XZ與CPIO的方式來解壓與建置Initrd(如RHEL 6.2~與CloneZilla 2.1.2-20等PXE Image,但在OS內都是用Initramfs[CPIO+GZIP]來做開機)
#file initrd.img
initrd.img: LZMA compressed data, streamed or xz compressed data -> 在RHEL 6.2之前的會出現initrd.img: data
#xz -dc initrd.img | cpio -id
#find . | cpio -c -o | xz -9 --format=lzma > initrd.img

3) 透過DD與GZIP的方式來掛載與建置Ramdisk(需在CentOS 5.x的環境才能建置)
#file ramdisk.gz
ramdisk.gz: gzip compressed data, from Unix, last modified: Fri Nov 30 02:18:32 2012, max compression
#gzip -d ramdisk.gz
#file ramdisk
ramdisk: Linux rev 1.0 ext2 filesystem data (large files)
#mount -o loop ramdisk /mnt
#gzip -c rootfs | dd of=rootfs.gz

4) 透過ISO與Memdisk直接做PXE開機(如FreeBSD的mfsbsd等,透過Memdisk用iso的方式開機)
#file mfsbsd-9.1-RELEASE-amd64.iso
mfsbsd-9.1-RELEASE-amd64.iso: ISO 9660 CD-ROM filesystem data 'MFSBSD' (bootable)
#mount -o loop mfsbsd-9.1-RELEASE-amd64.iso /mnt

5) 其他直接用執行檔的方式做開機(如XenServer等,但沒辦法做掛載與客製化)
#file xen.gz
xen.gz: gzip compressed data, from Unix, last modified: Fri Nov 30 02:18:32 2012, max compression
#gzip -d xen.gz
#file xen
xen: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped

6) 按照上面的說明,解決將客戶的Image用RHEL 6.2的Kernel開機(拿到時是以Gzip和CPIO做打包)
#gzip -dc custom.img.gz | cpio -iduvc
#rm -rf custom.img
#find . | cpio -c -o | xz -9 --format=lzma > initrd.img

7) 針對Tar搭配LZMA檔案格式來做解壓與壓縮(前者Command為新版OS在用,後者皆反之[EX:CentOS 5.3])
#tar xfv backup.tar.lzma --lzma
#cat backup.tar.lzma | lzma -d | tar xv
#xz -dc backup.tar.lzma | tar xvf -
#tar cfv backup.tar.lzma a/dir --lzma
#tar cv a/dir | lzma -c -z > backup.tar.lzma

以上就是關於目前Ramdisk在PXE開機時的幾種型態,至於在步驟三的建置部分,詳情可以參考Jablonskis的文章,另外其他Initrd與Ramdisk的部分,或是Tar搭配LMZA格式的部分均參考這篇文章,所以如果看倌們覺得還不過癮,可以試看看其他版本的Distribution,先到這,收工!

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 
This site is protected by WP-CopyRightPro