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