文章目录
前言
从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