iT邦幫忙

DAY 24
2

我與BASH shell scripting的每一天系列 第 24

我與BASH的每一天 - [24] 打包initrd image

  • 分享至 

  • xImage
  •  

示範如何修改initrd image的內容。
發現我們自己做的block driver移植到Xen的環境上會有問題,我懷疑是因為移植的時候沒有把Xen相關的kernel module給包進initrd image,造成開機時缺乏那些module,使得相關的iscsi動作異常。所以我把重包過與系統原始的initrd image打開來比較,發現確實lib目錄中確實少了兩個xen相關的kernel module,init當然也沒有load到。所以將缺少的xen module複製進去,並修正的init之後,就可以把他們重包回initrd image試試看了。

動作示範:

因為initrd image其實是壓縮檔(可以使用file指令去驗證),所以必須先以gunzip解開之後,再經由cpio -i命令去解開。

file initrd-2.6.18-274.el5.img
initrd-2.6.18-274.el5.img: gzip compressed data, from Unix, last modified: Mon Oct  1 15:14:46 2012, max compression

# 在使用gunzip解壓縮前,先將檔案的副檔名改成.gz
mv initrd-2.6.18-274.el5.img initrd-2.6.18-274.el5.gz

gunzip initrd-2.6.18-274.el5.gz

cpio -i < initrd-2.6.18-274.el5

修改完initrd image的內容之後,再用cpio -o打包,並且用gzip壓縮起來。但是cpio的動作需要搭配find指令,所以這一串的動作可以用BASH pipeline的技巧完成。

find . | cpio --quiet -H newc -o | gzip -9 -n > /boot/initrd.img

以上的動作就是先透過find命令找出目錄下的所有(需要包進initrd image)檔案,丟給cpio打包,再經gzip壓縮成**/boot/initrd.img**,一氣呵成,乾淨俐落。

[系列文章]

我與BASH的每一天 - [1]利用bc命令來取得數字字串中的特定欄位值
我與BASH的每一天 - [2]直取字串變數中的特定欄位值
我與BASH的每一天 - [3] 利用awk來擷取特定欄位
我與BASH的每一天 - [4] 利用awk來擷取特定欄位-2
我與BASH的每一天 - [5] 利用awk來擷取特定欄位-3
我與BASH的每一天 - [6] 利用cut來擷取特定欄位
我與BASH的每一天 - [7] grep指令的妙用 - 1
我與BASH的每一天 - [8] grep指令的妙用 - 2
我與BASH的每一天 - [9] 正規化表示法 - 1
我與BASH的每一天 - [10] 正規化表示法 - 2
我與BASH的每一天 - [11] 正規化表示法 - 3
我與BASH的每一天 - [12] 正規化表示法 - 4
我與BASH的每一天 - [13] sed - 1
我與BASH的每一天 - [14] sed - 2
我與BASH的每一天 - [15] sed - 3
我與BASH的每一天 - [16] 多條件選擇 - case
我與BASH的每一天 - [17] 建立自動化的暫存檔 - mktemp
我與BASH的每一天 - [18] if 條件判斷的正規化用法
我與BASH的每一天 - [19] 複合式的條件判斷
我與BASH的每一天 - [20] 代表參數位置的特殊變數符號與shift
我與BASH的每一天 - [21] 特殊的參數變數符號: $@ 與 $*
我與BASH的每一天 - [22] while-loop與array的結合
我與BASH的每一天 - [23] 顯示程式執行的進度
我與BASH的每一天 - [24] 打包initrd image


上一篇
我與BASH的每一天 - [23] 顯示程式執行的進度
下一篇
我與BASH的每一天 - [25] 紀錄鍵盤動作的命令 - script
系列文
我與BASH shell scripting的每一天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言