標籤:style http os 使用 io ar 檔案 art html
initrd的參考文檔可見:
1) Linux initial RAM disk (initrd) overview, http://www.ibm.com/developerworks/linux/library/l-initrd/index.html
2) NTTdocomo-openstack / baremetal-initrd-builder, https://github.com/NTTdocomo-openstack/baremetal-initrd-builder
2.1, nash指令(一個檔案小,內建了一些實用的指令)
2,2 掛載主要的檔案系統, 並建立裝置檔案所需的檔案系統
mount -t proc /proc /proc
mount -t sysfs /sys /sys
2.2.1,procfs映射著記憶體中的一個虛擬目錄,用於提供硬體、進程的即時資訊,會隨時變動。linux為保證穩定性,不允許訪問/proc下的檔案,root使用者也不例外。
2.2.2, sysfs也映射著記憶體中的一個虛擬目錄,用於硬體資訊的分類, sys目錄的每一個檔案都只有一個字元為內容來做開關的。
2.2.3, tmpfs也映射著記憶體中的一個虛擬目錄,記憶體中的檔案系統。想要速度快時,可以選擇在記憶體建立tmpfs類型的檔案系統,因為它都將建在記憶體中。
例如在記憶體中建立了一個tmpfs分區並掛載到/mnt/tmpfs目錄 :mount -t tmpfs -o size=50M tmpfs /mnt/tmpfs/
[[email protected] proc]# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 50M 0 50M 0% /mnt/tmpfs
2.2.4, /dev/shm,它是tmpfs的一種變種,tmpfs所有的內容所放在記憶體中,而/dev/shm在記憶體與檔案系統有個映射,硬碟和記憶體中都會有這內容。
速度快,能存大於記憶體的檔案,但重啟之後,內容會消失。
下面顯示在/dev/shm中建立檔案與在普通ext4檔案系統建檔案的速度比較:
[[email protected] proc]# time dd if=/dev/zero of=/dev/shm/test.file bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0395221 s, 2.7 GB/s
real 0m0.075s
user 0m0.001s
sys 0m0.041s
[[email protected] proc]# time dd if=/dev/zero of=/bak/test.file bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0647526 s, 1.6 GB/s
real 0m0.090s
user 0m0.001s
sys 0m0.066s
2.2.5,devfs, 所有的device都會在/dev目錄建立一個對應的裝置檔案.
缺點是例如即使印表機沒連在電腦上,/dev/printer檔案也會存在,這樣會造成在intrd階段的裝置過多,所以devfs正在被udev所取代
例如要用光碟機時,需先在linux與光碟機之間通過 mount /dev/cdrom /mnt/命令做關聯
2.2.6, udev, udev可以放在/sys目錄下,不需要將所有未使用的檔案建立裝置檔案,不再需要major number和minor number,當硬體被載入時可執行使用者佈建的script。
例如,如果/dev/cdrom是被udev建立的,而非devfs,那麼當光碟機被撥除時,/dev/cdrom檔案就會消失。
2.2.7,/proc/PID檔案,第一個進程都會對應這要閏個檔案
2.2.8,/proc/partitions用來表示檢測到的硬碟資訊, major欄位表示SCSI controller的slot ID,minor欄位表示分區ID。
#[[email protected] proc]# cat /proc/partitions
major minor #blocks name
8 0 488386584 sda
8 1 82051956 sda1
2.2.9, /sys/block,塊裝置
#[[email protected] proc]# cat /sys/block/
loop0/ loop1/ sda/ sr0/
2.2.10, /dev/pts ( pseudo terminal slave) 副虛擬終端,其目錄的檔案都是由ptmx(主虛擬終端)產生的,它們是父子關係。當用ssh聯機到localhost本地端之後,就會在
/dev/pts目錄下產生一個叫做"0"的檔案,當別的console也利用ssh聯到這台機器時,就會出現“1“.
[[email protected] proc]# ps -ef|grep ssh
hua 11186 3068 0 16:01 pts/0 00:00:00 ssh [email protected]
hua 11195 11187 0 16:01 ? 00:00:00 sshd: [email protected]/3
如上,當一個使用者以ssh登入之後,該使用者就分到一個ptmx所賦予的pts資源(pts/3),所以說ssh使用的是虛擬終端,不是真正的tty介面。telnet用的則是真正的tty介面。
2.2.11, /dev/mapper,如果使用LVM後,linux要和硬碟打交道時不再直接使用/proc/partitions下的硬碟裝置,而是使用/dev/mapper下的裝置再去中轉。
# ls -l /dev/mapper/*
brw-rw---- 1 root disk 253, 0 jan 27 16.16 /dev/mapper/vg0-lv0
# cat /proc/partitions
major minor #blocks name
8 0 17528 sda
253 0 1111 dm-0
3,建立最初所需使用的裝置檔案
裝置檔案使用mknod指令建立,mknod指令用來建立字元(character)或塊(block)檔案。
例:mknod /dev/tty1c41, 建立一個名為tty1的裝置檔案,c表示是字元檔案,major=4, minor=1
4,載入相關模組
5,切入image所指示的硬碟中實體作業系統. (rescue mode是直接通過kernel載入initrd進入單純的記憶體開機的虛擬作業系統)
5.1, mkrootdev -t ext4 -o defaults.ro hda1, 即nash指令會將GRUB中所裝置的root=xxx中的xxx路徑先建立好
5.2, mount /sysroot, 將GRUB中的root路徑mount到initrd中的/sysroot下。
5.3, switchroot這個nash指令將initrd中的/sysroot檔案系統切換成/rootfs,從而切換到了硬碟中的檔案系統。
Linux系統之initramfs工作流程