第2章的内容学完之后,很多人的状态都是“看明白了但手还是生的”。磁盘、LVM、文件系统与扩容备份这几个主题,光靠看是看不出经验的,必须落到命令行上,手指跟着敲一遍,概念才会真正变成自己的。这套配套练习题就是把第2章的每一个关键知识点拆成具体题目,从分区、PV/VG/LV到挂载、扩容、备份全部覆盖一遍,做完之后再回头看课堂笔记,你会明显感觉到哪些地方当时只是“过了一遍脑子”,哪些地方已经真正理解了。
这套题适合三类人:刚完成第2章学习、想检验掌握程度的初学者;已经做过练习但想查漏补缺的进阶者;还有准备动手实操但希望先搭好知识框架的人。建议不要盲猜答案,每道题都先开一台虚拟机或容器环境验证后再对照解析,这样才能把题目变成自己的经验。
1. 刷题之前:这套练习题的定位与使用方法
1.1 为什么学完知识点还必须刷题
磁盘与LVM这部分看起来知识点不密集,但实际操作链条很长。比如创建一个逻辑卷,至少涉及分区、PV、VG、LV、文件系统、挂载六层,每一层对应不同命令和不同的查看工具,任何一步记混了都会导致后续全部出问题。看视频时觉得命令顺序清清楚楚,轮到自己敲的时候往往在第一、第二步就开始犹豫,这就是典型的“被动输入”学会了,“主动输出”没学会。
练习题的作用恰恰是把输出动作固定下来。当你看到一道题要判断“扩展逻辑卷后是否需要重新挂载”,你的大脑会主动去检索resize2fs、xfs_growfs这些命令的适用场景;当你要填“查看物理卷的命令是什么”,你能瞬间反应出pvs还是pvdisplay,这种检索过程比重复读笔记花的时间少,但留下印象深得多。
1.2 题目分级与建议用时
这套题按难度分成三层。基础题考的是命令和概念的一一对应关系,比如lsblk、df、blkid分别干什么;进阶题考的是操作流程和注意事项,比如LVM扩容的正确顺序、fstab字段的含义;综合题则模拟真实运维场景,需要自己组织完整的命令链。建议给自己设定90分钟左右,前60分钟做题,后30分钟开着虚拟机逐条验证答案,不要只做“纸上谈兵”的判断。
测试时环境最好是一台全新的Ubuntu虚拟机,至少准备一块额外的空白虚拟磁盘,比如/dev/sdb。如果条件允许,做任何修改前先打一个快照,这样即使把分区表搞坏了也能一键恢复,练习成本会低很多。
1.3 先看题还是先翻书
我的建议是先不看任何资料,直接做题。做错不要紧,重点是标出你犹豫和错误的题号,之后针对性回看对应章节。如果一上来就翻书,题目就失去了检验功能,变成了抄答案。做完一遍后再把错题对应的命令重新敲一遍,直到不需要看任何提示能完整跑出一个扩容流程为止,这才算过关。
2. 磁盘与分区:基础题热身
2.1 选择题(共8题)
想要查看当前系统所有块设备的树状结构、大小和挂载点,最合适的命令是( )
A. df -h
B. lsblk
C. fdisk -l
D. blkid设备文件/dev/sdb1中的“sdb”表示( )
A. 第二个IDE硬盘
B. 第二个SATA/SCSI硬盘
C. 第一个硬盘的第二个分区
D. 第二个虚拟光驱MBR分区表最多能管理多大容量的磁盘( )
A. 1TB
B. 2TB
C. 4TB
D. 16TB关于GPT分区表,下列说法正确的是( )
A. 只能在UEFI启动模式下使用
B. 分区数量理论上没有限制
C. 需要至少4个主分区
D. 不兼容Linux系统parted命令中,把分区表格式设置为GPT的指令是( )
A. mklabel gpt
B. mkpart gpt
C. set 1 gpt on
D. format gpt查看某个分区的UUID和文件系统类型,最合适的命令是( )
A. df -T
B. lsblk -f
C. fdisk -l
D. du -sh使用fdisk创建新分区后,必须执行哪个操作让内核重新读取分区表( )
A. partprobe
B. sync
C. mount -a
D. udevadm monitor一块磁盘被分成主分区和扩展分区之后,扩展分区的作用是( )
A. 直接存放文件
B. 作为启动分区
C. 容纳多个逻辑分区
D. 备份分区表
2.2 判断题(共6题)
- fdisk命令既支持MBR分区表,也能处理GPT分区表。( )
- 一块磁盘上创建了扩展分区后,主分区数量最多可以达到128个。( )
- 删除一个正在使用的分区之前不需要先卸载它。( )
- lsblk命令能显示每个分区对应的UUID。( )
- GPT分区表在磁盘尾部保存了一份备份分区表头,因此比MBR更抗损坏。( )
- 用dd命令把磁盘的MBR备份出来,可以通过备份快速恢复引导扇区。( )
2.3 参考答案与解析
选择题答案:B、B、B、B、A、B、A、C。这也太整齐了,但每道题都是考点。第1题lsblk是查看块设备的首选,df -h只能看已挂载文件系统的容量,fdisk -l虽然能看分区信息但输出不如lsblk直观,blkid偏重于UUID和文件系统类型。第2题中,Linux的sd前缀代表SCSI/SATA/USB这类硬盘设备,第一块为sda,第二块为sdb,分区号从1开始编号。第3题是关键分界点,MBR分区表用4个16字节的分区表项描述分区,地址采用32位块号,最大寻址约2TB,超过这个容量必须用GPT。第4题GPT的核心优势是分区数量不依赖扩展分区机制,理论上可以创建非常多的分区,而MBR最多4个主分区。第5题parted使用mklabel gpt,fdisk则通过交互菜单来切换,两者不要混淆。第6题lsblk -f可以一次性显示所有块设备的UUID、文件系统类型和挂载点,最适合做题时的快速排查。第7题partprobe通知内核重新读取分区表,避免重启,是实际操作中极易忘记的一步。第8题扩展分区本身不能被格式化,它的唯一使命就是容纳逻辑分区。
判断题答案:对、错、错、对、对、对。第2题错误,MBR模式主分区最多4个,想要更多分区只能建立扩展分区,再在其中划分逻辑分区。第3题错误,直接删除使用中的分区会导致正在读写的数据损坏,正确做法是先umount卸载,再做分区操作。第4题正确,lsblk -f确实能显示UUID。第5题也是GPT的容错设计之一,磁盘头部和尾部都有分区表副本,对比MBR只在头部有一份,抗损坏能力明显更强。第6题正确,dd备份前446字节的引导代码加上分区表,确实能用于恢复引导扇区,这也是后面备份实操题的基础。
3. LVM核心概念与命令:填空与操作选择
3.1 概念填空题(共8题)
- LVM体系中的三层结构从底层到顶层依次是:物理卷(PV)、( )和逻辑卷(LV)。
- 创建一个物理卷使用的命令是( )。
- 查看一个卷组中包含了哪些物理卷,可以使用命令( )。
- 将新的物理卷加入已有卷组,使用的命令是( )。
- 在卷组vg0中创建一个名为data、大小为10G的逻辑卷,命令是( )。
- 逻辑卷设备文件在系统中的路径通常是( )/(逻辑卷名)。
- 扫描系统中所有LVM卷组并重新识别它们,可以执行( )。
- XFS文件系统扩容时要使用( )命令,而不是resize2fs。
3.2 命令选择题(共6题)
想把一整块磁盘/dev/sdc作为物理卷交给LVM管理,正确的命令是( )
A. pvcreate /dev/sdc1
B. pvcreate /dev/sdc
C. vgcreate /dev/sdc
D. lvcreate /dev/sdc使用lvcreate创建逻辑卷时,如果希望大小随卷组剩余空间全部使用,参数是( )
A. -l 100%FREE
B. -L 100%FREE
C. -s 100%FREE
D. -m 100%FREE下列哪个命令用于查看逻辑卷的详细信息,包括大小和条带属性( )
A. lvs
B. lvscan
C. lvdisplay
D. blkid执行lvextend -L +5G /dev/vg0/data之后,还差哪一步才能让文件系统真正变大( )
A. 执行umount后重新挂载
B. 执行resize2fs或xfs_growfs
C. 执行pvscan
D. 无需其他操作关于LVM缩减逻辑卷,下列说法正确的是( )
A. XFS文件系统支持在线缩减
B. ext4文件系统支持先缩减文件系统再缩减LV
C. 缩减操作没有任何风险
D. 缩减前不需要备份数据某PV已经不再需要,想把它的数据迁移到卷组内其他PV上,可以使用( )
A. pvmove
B. pvremove
C. vgextend
D. lvreduce
3.3 参考答案与解析
填空题答案:卷组(VG);pvcreate;pvs(或pvdisplay);vgextend;lvcreate -L 10G -n data vg0;/dev/vg0;vgscan;xfs_growfs。第1题是LVM的总纲,所有操作都围绕PV、VG、LV三层展开,一定要记清层级关系。第2题pvcreate后跟上整个PV设备,比如/dev/sdc;而/dev/sdc1是分区设备,如果你还没给磁盘分区,直接pvcreate /dev/sdc才是对的。第3题pvs是精简视图,pvdisplay是详细信息。第5题需要注意顺序:lvcreate -L大小 -n名字 卷组名,设备路径自动生成/dev/vg0/data。第6题中LV路径是“/dev/卷组名/逻辑卷名”,这也是实现跨设备统一命名的好处。第7题在系统启动或新接入磁盘后常用,vgscan会把所有卷组信息重新加载一遍。第8题是第2章最容易踩的坑,XFS不支持resize2fs,必须用xfs_growfs。
选择题答案:B、A、C、B、B、A。第1题直接对整块盘做PV,不需要先分区,这是LVM相对传统分区的一个优势。第2题中缩写的“-l”代表指定PE数量,“-L”指定容量,所以100%FREE要用-l。第3题lvdisplay给出LV的完整属性,lvs更适合日常一眼扫过。第4题lvextend只是把LV的边界扩大,文件系统还不知道自己变大了,必须用resize2fs(ext4)或xfs_growfs(XFS)通知文件系统吸收新空间。第5题里XFS只能扩大不能缩小,ext4虽然能缩小,但必须先卸载、检查文件系统、缩小文件系统再缩小LV,顺序不能反,而且风险较高,建议操作前备份。第6题pvmove会把源PV上的数据平滑迁移到卷组内其他空闲PV,这是在线维护存储的利器。
4. 文件系统与挂载:实操题与fstab细节
4.1 实操题:把150G的逻辑卷格式化成ext4并挂载到/data
假设系统里已经有一个逻辑卷/dev/vg0/data,空间为150G,当前没有文件系统。请你写出完成以下目标的命令序列。
要求:
- 创建ext4文件系统;
- 创建挂载目录/data;
- 临时挂载逻辑卷;
- 查看挂载结果和UUID;
- 将该挂载项写入/etc/fstab,实现开机自动挂载。
这道题覆盖了第2章文件系统挂载的主要流程,动手做的时候建议在虚拟机上完整执行一遍,不要只看命令。
4.2 扩展实操:开机自动挂载最常见的三个错误
很多人在把挂载项写入/etc/fstab后重启系统,发现进不了图形界面,或者系统停在救援模式,这通常是fstab写错导致。下面三个错误是我见过最多的:
第一个错误是直接写设备路径。比如写“/dev/vg0/data /data ext4 defaults 0 0”,如果系统里LVM设备顺序发生变化,或者内核在挂载阶段还没激活VG,这个路径可能会失效。更稳妥的写法是先用blkid查出UUID,然后写“UUID=xxxx /data ext4 defaults 0 0”。UUID在文件系统创建时就固定了,除非重新格式化,否则不会变。
第二个错误是漏写挂载参数。defaults是最常见选择,但它背后对应rw、suid、dev、exec、auto等默认选项的组合,日常挂载数据盘用defaults没问题。但如果挂载点涉及用户读写访问,可能需要追加“uid=xxx,gid=xxx”或“nofail”。特别是当磁盘是可拆卸设备时,建议加上nofail参数,这样设备不在时系统不会卡在挂载阶段。
第三个错误是写完fstab后没有先执行mount -a验证就直接重启。正确的检查流程是:写完文件后用mount -a重挂载所有文件系统,能成功就说明配置无误;再用findmnt核对挂载点是否符合预期。如果mount -a报错,直接修改fstab后再重启,不要带着错误重启。
4.3 实操参考答案与错误分析
完整命令序列如下:
mkfs.ext4 /dev/vg0/data mkdir -p /data mount /dev/vg0/data /data blkid /dev/vg0/data把blkid输出的UUID记录下来,然后编辑/etc/fstab,添加这样一行:
UUID=你的UUID值 /data ext4 defaults 0 0写入后依次执行:
mount -a findmnt /data systemctl daemon-reload如果findmnt正常输出/data的挂载信息,说明fstab配置没有问题,关机重启验证一次即可。
这道题里最常见的错误是第4步和第5步衔接不上:blkid输出的是UUID,但在写fstab时仍然图省事写设备路径。前者更稳妥,因为LVM设备路径在特殊情况下会漂移,UUID则相对稳定。另外,如果mkfs之后立刻用blkid看不到UUID,可以执行udevadm settle或者稍等几秒,因为内核和udev需要一点时间识别新文件系统。这一步虽然不起眼,但很多人在写脚本时会因为时序问题遇到“blkid找不到UUID”的假故障。
5. 扩容与备份:综合题与排错思路
5.1 场景题:在线扩容一个ext4文件系统
系统环境如下:
- 卷组vg0当前剩余空间为0;
- 现有逻辑卷/dev/vg0/data,大小120G,文件系统ext4,挂载在/data,业务正在运行不能中断;
- 管理员新插入一块300G空白磁盘/dev/sdb。
请写出完整的扩容步骤,要求做到在线扩容,即业务不中断、不卸载/data。
这个场景是磁盘管理中非常典型的“容量告急”情况。解题的关键在于把操作顺序分为四段。第一段是物理层:给新磁盘创建分区并把分区标记为LVM可用,注意在现代Linux中整套LVM已经可以识别分区类型自动处理,但用fdisk创建分区时把类型设为8E(Linux LVM)有助于后续识别。创建后执行partprobe刷新分区表。第二段是PV层:pvcreate /dev/sdb1,再把PV加入卷组,vgextend vg0 /dev/sdb1。此时用vgs可以看到vg0的空闲空间已经变成300G左右。第三段是把空闲空间分配给LV:lvextend -L +200G /dev/vg0/data,注意这里的“+”号表示在原有基础之上增加200G。第四段是文件系统层:resize2fs /dev/vg0/data,把ext4文件系统扩展到整个LV,然后df -h确认扩容结果。
这四个阶段环环相扣,很多人会漏掉某一环。最典型的是lvcreate/lvextend完成之后,文件系统大小不变,于是跑来问为什么df显示没变化。原因就是没有执行resize2fs。同理,如果文件系统是XFS,第四步必须换成xfs_growfs /data,走一遍就会发现XFS和ext4在扩容命令上的差异非常明确。
5.2 备份与恢复:三个不同的备份工具怎么选
同样是备份,dd、tar、rsync的定位完全不同,选错工具会把简单问题复杂化。我把它们的适用场景拆开讲一下。
dd适合块级备份,比如备份整个分区或整块磁盘,包括文件系统结构。命令:
dd if=/dev/sda of=/backup/sda.img bs=4M status=progress恢复时反过来:
dd if=/backup/sda.img of=/dev/sda bs=4M status=progress注意dd是按块拷贝,恢复目标盘必须等于或大于备份源盘,否则会截断数据,而且恢复时目标分区不能挂载,否则等于边写边读一个正在使用的文件系统,后果完全不可控。dd还会把UUID一起复制过去,如果备份源和目标同时挂在系统里,这两个分区的UUID会冲突,要特别小心。
tar适合文件级备份,可以打包目录并保留权限。备份命令示例:
tar czvf /backup/data_$(date +%F).tar.gz -C /data .解压恢复:
mkdir -p /data_restore tar xzvf /backup/data_2025-06-01.tar.gz -C /data_restoretar备份时要注意必须带上-p参数或在root下执行以保留权限,漏了权限恢复后文件owner和mode可能会乱。另外,tar会消耗大量IO,如果系统正在提供在线服务,建议错峰执行。
rsync适合同步和增量备份,这里给一个最常用的镜像同步命令:
rsync -av --delete /data/ /backup/data_mirror/-a保留权限、时间戳等属性,-v显示进度,--delete让目标目录与源完全一致,源里删除的文件目标也会删除。这个过程是增量的,第一次慢,之后只传变化部分,非常适合定期备份。但要注意一条铁律:rsync同步目录时,源路径写成/data/和写成/data含义不同。前者把目录内容复制到目标,后者把目录本身复制到目标,多一个斜杠结果完全不同。
5.3 备份验证与恢复测试的常见坑
备份做完了不等于备份就能用。我见过太多备份文件躺在磁盘上,但真正恢复时发现tar包损坏、dd镜像文件系统无法挂载的情况。所以备份后至少做两件事:第一,用tar -tzf压缩包名看文件列表能否正常列出,验证压缩包完整性;第二,把备份恢复到一台临时虚拟机或空目录里,启动或挂载确认可用。这一步叫“恢复演练”,比备份本身更考验真实水平。另外,dd压缩镜像时可以使用“gzip”管道,但也要注意恢复时先解压再写入,避免管道错误导致半成品镜像。
6. 综合场景题:从0到1搭建一套可扩容、可备份的存储环境
6.1 场景描述
某公司(这里泛指测试环境)的一台Ubuntu服务器现有系统盘/dev/sda,此外还有三块300G数据盘:/dev/sdb、/dev/sdc、/dev/sdd。需求如下:
- 三块数据盘全部纳入同一个名为vg_data的卷组;
- 在vg_data上创建两个逻辑卷:lv_app大小为200G,文件系统为ext4,挂载到/opt/app;lv_log大小为100G,文件系统为XFS,挂载到/var/log/app;
- 将来lv_app和lv_log都需要支持在线扩容;
- 每周对/opt/app做一次tar全量备份,备份文件放到外置存储/backup;
- 每天晚上对/var/log/app做一次rsync增量同步到/backup/log_mirror。
请根据上述需求完成整套方案,并回答以下问题。
6.2 分步问题
- 写出创建PV、VG的命令序列,并要求一启动就能识别卷组。
- 写出创建lv_app并格式化为ext4、创建lv_log并格式化为XFS的命令。
- 写出挂载两个逻辑卷并写进fstab的方案,要求使用UUID而不是设备路径。
- 如果未来需要给lv_app扩容到300G,卷组中的剩余空间是否够用?写出扩容命令。
- 写出每周全量备份/opt/app的tar命令,并说明为什么要把备份放到/backup而不是/opt/app本身。
- 写出rsync增量备份/var/log/app的命令,并解释--delete参数在此场景下的风险。
- 在扩容lv_app时如果文件系统是ext4,假设忘记执行resize2fs,会发生什么?
- 整个方案中,磁盘分区表应该选择MBR还是GPT?为什么?
6.3 参考答案与完整命令序列
第1题:
pvcreate /dev/sdb /dev/sdc /dev/sdd vgcreate vg_data /dev/sdb /dev/sdc /dev/sdd vgscan vgchange -ay直接用整块磁盘做PV,省去分区步骤,这是LVM最常见的做法。vgcreate时同时把三块PV放入一个卷组,vgscan用于启动或设备变化后重建缓存。
第2题:
lvcreate -L 200G -n lv_app vg_data lvcreate -L 100G -n lv_log vg_data mkfs.ext4 /dev/vg_data/lv_app mkfs.xfs /dev/vg_data/lv_log如果卷组剩余空间不足以创建对应LV,会直接报错提示空间不足,这也是分布式创建不同文件系统逻辑卷的标准做法。第3题:
blkid /dev/vg_data/lv_app blkid /dev/vg_data/lv_log把两个UUID写入/etc/fstab,对应行如下:
UUID=lv_app的UUID /opt/app ext4 defaults 0 0 UUID=lv_log的UUID /var/log/app xfs defaults 0 0然后执行mkdir -p创建挂载目录,执行mount -a挂载全部文件系统,再用findmnt验证。注意xfs的fstab字段和ext4格式一致,但文件系统类型必须写xfs。
第4题:卷组总空间300G×3=900G,lv_app初始200G,lv_log初始100G,已分配300G,剩余约600G,扩容200G绝对够。命令:
lvextend -L +200G /dev/vg_data/lv_app resize2fs /dev/vg_data/lv_app如果是XFS,用xfs_growfs挂载点替代resize2fs。扩容全程不需要卸载,完全在线。
第5题:
mkdir -p /backup tar czvf /backup/app_$(date +%F).tar.gz -C /opt/app .备份文件必须放到独立于源数据之外的存储上。如果放在/opt/app内部,备份文件本身也在源目录里,下次备份时会被一起打包进去,造成备份文件指数级增长,同时占用的还是被备份盘自己的空间。
第6题:
rsync -av --delete /var/log/app/ /backup/log_mirror/--delete在镜像同步场景下很有用,但如果源目录因为误删文件导致内容不完整,--delete也会把目标里还保留的完整副本删掉。所以对日志这类要保留历史的数据,建议不要加--delete,或者配合版本化目录使用。
第7题:忘记执行resize2fs时,lvextend只是把LV边界扩大了,文件系统元数据仍然认为分区大小是200G。结果是df -h显示容量没变,依然是200G,但lvdisplay或lvs里LV大小已经变成400G,白白浪费新空间。这是扩容操作中最高频的错误,没有之一。
第8题:总容量900G,远超MBR的2TB限制吗?并没有,900G小于2TB,MBR理论上够用。但考虑未来还可能继续加盘、单个分区可能超过2TB,建议直接用GPT。GPT在Linux下的兼容性已经非常成熟,而且分区表自带备份,容错性更好。使用parted set /dev/sdb mklabel gpt可以转换,但实际操作中直接让LVM管理整块盘时,分区表的影响并不大,整块盘作为PV是最省事的选择。
7. 做完题之后的收尾建议
整套题做完,最重要的不是“对了多少题”,而是能不能不看答案把6.2里的综合场景完整复现一遍。我实测过,如果能在30分钟内从裸磁盘一路做到挂载、扩容、备份验证,这份能力应付日常Linux服务器的存储管理需求已经足够。
我个人的练习顺序建议是:先做完2到3、再独立做4、5各一次,最后对着6的综合场景写完整命令。哪一步卡住了,立刻回到对应章节看原理,而不是硬背命令。比如lvextend和resize2fs到底谁先谁后,理解“LV边界先扩大,文件系统再吸收空间”这个逻辑,永远就不会记反。再比如XFS和ext4的区别,只要记住一句话——XFS只能进不能退,所有的缩减需求先在选型阶段就规避掉,后面能少踩一大半的坑。
如果这套题里还有某道题让你觉得“看了答案也不太服气”,那恭喜你,这恰恰说明你已经发现了自己知识的盲区。别急着往后学,把对应命令在虚拟机里反复敲上十遍,直到形成指尖记忆,再进入下一课。