LFS技術細節解析(1):Linux shell硬盤自動分區腳本詳解

關聯文章:
從LFS到自己的Linux發行版—系列教程之一:一步一步帶你體驗LFS8.2

LFS技術細節解析(2):echo命令實現Linux shell人機交互詳解

前言

從LFS到自己的Linux發行版 系列文章的開篇: 一步一步帶你體驗LFS8.2
一文自登出後,受到大家歡迎,閱讀量、下載數都比較大。百度搜索LFS詞條,該文章已經排名第一,別誤會,我可沒有競價排名啊。

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硬盤的分區。命令如下圖:

shell中輸入運行自動分區腳本命令
命令執行後,對LFS硬盤自動進行分區並建立了分區表,如下:

在這裏插入圖片描述
下面兩張圖分別是分區前和分區後用shell命令fdisk -l查詢分區情況的結果。可以看出,通過運行硬盤自動分區腳本後disk /dev/sdb(即新加的LFS硬盤)有了硬盤標識Disklable、出現了兩個分區 /dev/sdb1/dev/sdb2

LFS硬盤分區前
LFS硬盤自動分區後
終上所述,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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章