關聯文章:
從LFS到自己的Linux發行版—系列教程之一:一步一步帶你體驗LFS8.2
LFS技術細節解析(2):echo命令實現Linux shell人機交互詳解
文章目錄
前言
從LFS到自己的Linux發行版 系列文章的開篇: 一步一步帶你體驗LFS8.2
一文自登出後,受到大家歡迎,閱讀量、下載數都比較大。百度搜索LFS詞條,該文章已經排名第一,別誤會,我可沒有競價排名啊。
該文章有如下一段話:本教程會以最低難度、最明確步驟爲宗旨,跟你一步一步體驗基於LFS8.2編譯、構建出能運行的Linux系統,讓你對LFS有個初步認識;力爭帶你一次成功,讓你樹立信心、獲得成就感。我在該文以及 從LFS到自己的Linux發行版 系列教程的後續文章中均會貫徹該宗旨。所以除非必需的、我不會在技術細節上摳得太深,免得讀者只見樹木、不見森林。“知其然、知其所以然”,該系列教程解決了“知其然”的問題。
該系列教程中的一些並沒講清楚、讀者不一定看明白的技術細節,我會以名爲 LFS技術細節解析 的系列文章來解決大家“知其所以然”的問題。這些技術細節,我也不是天然就知道的,是通過大量實踐並歸納總結所得。閱讀該系列文章,能使讀者避免重複勞動、節省大量時間,因爲Linux知識實在太浩繁,你可以把大量的時間耗費於Linux更全面、更深入的學習。
LFS 中 Linux shell硬盤自動分區的實現過程
一步一步帶你體驗LFS8.2 一文中,提前編輯好了一個shell硬盤自動分區腳本文件disk-partition.sh,放於宿主機的home目錄(即主目錄)中,LFS時打開終端、並以管理員身份在shell中輸入運行硬盤自動分區腳本命令:bash disk-partition.sh
(LFS時,在此之前和之後均須輸入、運行不少其他命令,跟分區無關,在此予以忽略),對新加的用於LFS的硬盤(以下簡稱LFS硬盤)進行自動分區,而不是在shell中輸入fdisk /dev/sdb
命令、再進行人機交互實現對LFS硬盤的分區。命令如下圖:
命令執行後,對LFS硬盤自動進行分區並建立了分區表,如下:
下面兩張圖分別是分區前和分區後用shell命令fdisk -l
查詢分區情況的結果。可以看出,通過運行硬盤自動分區腳本後disk /dev/sdb(即新加的LFS硬盤)有了硬盤標識Disklable、出現了兩個分區 /dev/sdb1和 /dev/sdb2:
終上所述,LFS時通過在宿主機shell中執行運行硬盤自動分區腳本命令,實現了對LFS硬盤的的自動分區。是腳本文件 disk-partition.sh中的腳本命令一步步讓宿主機對LFS硬盤進行了分區。
LFS 中 Linux shell硬盤自動分區腳本
那麼,大家肯定想,自動分區腳本文件disk-partition.sh中有哪些腳本命令呢?這些腳本命令又是如何實現自動分區的呢?
下面先把disk-partition.sh中的腳本複製於下,大家先看一下其中的腳本命令:
#!/bin/bash
echo "m
n
p
1
+40000M
n
p
2
+5000M
w
" | fdisk /dev/sdb
Linux shell硬盤手動分區過程分析
假設有一個新添加的硬盤超過50G的硬盤(例如 一步一步帶你體驗LFS8.2一文中的LFS硬盤),我們要在這個硬盤分出兩個分區:5G的swap分區和40G的主文件分區,我們需要怎樣操作呢?
首先,我們打開終端,切換到管理員用戶,輸入命令:fdisk /dev/sdb
並執行,這裏的 /dev/sdb爲需要分區的硬盤名,並根據電腦輸出的提示輸入合適的內容以做出選擇。
輸入:m
,查看幫助。
輸入:n
,新建分區;選擇主分區,輸入:p
;接下來選擇主分區序號,這裏輸入:1
;接下來選起始扇區,直接回車、即不輸入任何信息選默認選項;接下來選結束扇區,輸入:+40000M
。至此,40G的主文件分區已經完成。
重複上述過程,輸入:n
,新建分區;選擇主分區,輸入:p
;接下來選擇主分區序號,這裏輸入:2
;接下來選起始扇區,直接回車;接下來選結束扇區,輸入:+5000M
。至此,swap分區已經完成。
上述兩個分區完成後,輸入:w
,以保存分區。
輸入:fdisk -l
,檢查分區情況,可見硬盤 /dev/sdb與shell腳本自動分區結果完全一樣,已經分出兩個分區。
LFS 中 Linux shell硬盤自動分區腳本分析
瞭解了Linux shell硬盤手動分區過程,再看LFS 中 shell硬盤自動分區腳本,恍然大悟,LFS 中 shell硬盤自動分區,是用Linux shell命令 echo " " | fdisk /dev/sdb
中預置答案自動回答了分區命令fdisk
中的有關問題實現分區。
其中:
#!/bin/bash
爲shell腳本標準起始語句;
echo "
" | fdisk /dev/sdb
這兩行語句實際爲分區批處理語句 echo " " | fdisk /dev/sdb
," "
中間內容爲預置答案,注意是從第一個引號"
後即開始回答問題、回答問題時需要回車的,在這個腳本里面同樣需要回車,/dev/sdb爲實際需要分區的硬盤名,也可以是其他名稱。
這樣,我們就明白了LFS 中 shell自動分區腳本中各命令的作用,並能舉一反三分出更多的分區 /dev/sdb3 、 /dev/sdb4 等,當然主分區只能有4個,超出數量就要分區成邏輯分區。
LFS 中 Linux shell硬盤自動分區腳本改進
前面分析的LFS shell硬盤自動分區腳本,適用於新添加、沒有任何分區表的、大於45G的硬盤。硬盤上已經有分區表、有情況不明的分區怎麼辦?硬盤不足45G或者遠遠大於45G怎麼辦?
我們可以通過添加刪除分區語句、調整分區程序,來解決上述問題。還是直接上改進後的腳本吧,對上面分析的LFS 中 shell自動分區腳本有了深刻理解,這個改進也一樣容易理解:
#!/bin/bash
dd if=/dev/zero of=/dev/sdb bs=1024 count=1024
echo "m
n
p
2
+5000M
n
p
1
w
" | fdisk /dev/sdb