当前位置: 首页 > news >正文

Ubuntu 磁盘修复

Ubuntu 磁盘修复

在 ubuntu 文件系统变成只读模式,该处理呢?
文件系统内部的错误,如索引错误、元数据损坏等,也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误,可能导致文件系统被错误地挂载为只读模式。接下来跟着文章逐步排查、修复问题。

作者:炭烤毛蛋 ,点击博主了解更多。


提示:数据无价,操作需谨慎。

文章目录

  • Ubuntu 磁盘修复
  • 1. 硬盘错误日志
  • 2. 硬盘错误分析
  • 3. 硬盘数据恢复
    • 3.1 借助 fsck 命令修复文件系统
    • 3.2 借助 smartctl 检查硬盘健康状态
  • 结语


1. 硬盘错误日志

Ubuntu 系统在正常使用过程突然出现文件系统变为只读,没过多久系统重启。
重启后系统无法正常开机,而是停留在启动的命令终端。

  • 启动日志
Ubuntu 22.04.2 LTS Linux tty1
Cloud-init[1327] v.23.1.2-OubuntuO~22.04.1 running 'moudles:config' at Mon Aug  5 11:16:56 PM CST 2019 +0000. Up 199.40 seconds.
Cloud-init[1334] v.23.1.2-OubuntuO~22.04.1 running 'moudles:final' at Mon Aug  5 11:16:56 PM CST 2019 +0000. Up 199.92 seconds.
Cloud-init[1334] v.23.1.2-OubuntuO~22.04.1 finished at Mon Aug  5 11:16:57 PM CST 2019 +0000. Datasource DataSourceNone. Up 200.06 seconds.
Cloud-init[1334] Mon Aug  5 11:16:57 PM CST 2019 - cc_final_message.py[WWARNING]: Used failback datasource
blk_update_request: I/O error, dev sda, sector 24460536 op 0x0:(READ) flag 0x80700 phys_seg 2 prio class 0
blk_update_request: I/O error, dev sda, sector 24460576 op 0x0:(READ) flag 0x80700 phys_seg 1 prio class 0
blk_update_request: I/O error, dev sda, sector 24460624 op 0x0:(READ) flag 0x80700 phys_seg 1 prio class 0
blk_update_request: I/O error, dev sda, sector 24460576 op 0x0:(READ) flag 0x0 phys_seg 1 prio class 0
blk_update_request: I/O error, dev sda, sector 24460576 op 0x0:(READ) flag 0x0 phys_seg 1 prio class 0
blk_update_request: I/O error, dev sda, sector 1835808720 op 0x0:(READ) flag 0x80700 phys_seg 4 prio class 0
blk_update_request: I/O error, dev sda, sector 1835808720 op 0x0:(READ) flag 0x0 phys_seg 1 prio class 0
blk_update_request: I/O error, dev sda, sector 24466768 op 0x0:(READ) flag 0x80700 phys_seg 2 prio class 0
blk_update_request: I/O error, dev sda, sector 24466808 op 0x0:(READ) flag 0x80700 phys_seg 1 prio class 0
blk_update_request: I/O error, dev sda, sector 24466768 op 0x0:(READ) flag 0x0 phys_seg 1 prio class 0

从启动日志分析磁盘可能出现坏道,或者坏块影响正常使用。

  • 尝试修复启动异常
    尝试重新挂载文件系统,发现仍然为只读模式。
mount -o remount,rw /

尝试显示文件系统的元数据,如果看到检测异常信息,很大概率是磁盘问题。

tune2fs -l /dev/sda | grep checked

2. 硬盘错误分析

磁盘损坏可能导致文件系统不稳定或丢失数据,影响系统性能甚至导致系统无法启动。如果磁盘出现严重的物理故障,可能需要更换硬盘或备份数据后进行恢复。

  • bios 查看磁盘状态
    重新进入 BIOS 查看硬盘,发现硬盘已经掉线,使用机械硬盘从现象确认磁盘存在坏道问题。
    raid0

  • 重新挂载磁盘
    raid0 阵列硬盘出现硬盘损坏情况,系统默认记录当前状态。想要重新挂载该磁盘需要先清除磁盘标识,再尝试挂载硬盘。
    disk-fail
    磁盘挂载成功,然后仍然无法进入系统。好消息确认磁盘已损坏,坏消息磁盘有大量数据。
    抱着能找回尽量找回的原则,可以尝试从 U 盘系统修复磁盘。

  • U盘引导进入系统
    借助带有 Ubuntu 安装 U盘,然后进入到 Ubuntu 尝试安装的临时系统,然后尝试修复损坏磁盘。
    制作启动U盘和U盘启动,此处省略 1万字,需要的小伙伴自行百度。进入U盘系统按照如下方法修复磁盘。

3. 硬盘数据恢复

在 Ubuntu 系统中,修复磁盘通常是为了修复文件系统的损坏或修复磁盘上的错误。修复 Ubuntu 系统中的磁盘问题,通常包括使用 fsck 修复文件系统错误、使用 smartctl 检查硬盘健康状态,或者通过图形界面工具进行管理。

3.1 借助 fsck 命令修复文件系统

fsck(文件系统检查器)是 Linux 系统中用于检查和修复文件系统错误的工具。使用此命令可以扫描文件系统并自动修复文件系统中的错误。

  • 检查磁盘
fsck /dev/sda

/dev/sda 可以替换为需要修复的磁盘设备分区,第一个磁盘分区,则使用 /dev/sda1。

  • 尝试自动修复磁盘
    使用 fsck 尝试自动修复磁盘,该命可以自动修复错误。
fsck -y /dev/sda

提示:磁盘正在被使用(比如挂载了某个分区),你需要先卸载该分区再执行恢复磁盘数据。

  • 强制修复
fsck -f /dev/sda

好在磁盘损坏较轻,经过简单修复可以读到原来数据。接下来备份磁盘内容就不必多讲。

  • fsck 命令详细注释
Usage:fsck [options] -- [fs-options] [<filesystem> ...]Check and repair a Linux filesystem.Options:-A         check all filesystems-C [<fd>]  display progress bar; file descriptor is for GUIs-l         lock the device to guarantee exclusive access-M         do not check mounted filesystems-N         do not execute, just show what would be done-P         check filesystems in parallel, including root-R         skip root filesystem; useful only with '-A'-r [<fd>]  report statistics for each device checked;file descriptor is for GUIs-s         serialize the checking operations-T         do not show the title on startup-t <type>  specify filesystem types to be checked;<type> is allowed to be a comma-separated list-V         explain what is being done-?, --help     display this help--version  display versionSee the specific fsck.* commands for available fs-options.
For more details see fsck(8).

3.2 借助 smartctl 检查硬盘健康状态

如果怀疑磁盘存在物理问题,可以使用 smartctl 工具来检查硬盘的健康状况,特别是对于固态硬盘 (SSD) 和机械硬盘 (HDD) 都非常有用。

  • 安装 stmartmontools
sudo apt update
sudo apt install smartmontools
  • 检查硬盘状态
smartctl -a /dev/sda

将输出硬盘的健康状态报告,包括错误日志和一些详细的健康信息。看到“Reallocated Sector Count”或“Pending Sector”,可能硬盘正在出现物理故障。

  • smartctl 命令详细注释
smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.15.167.4-microsoft-standard-WSL2] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.orgUsage: smartctl [options] device============================================ SHOW INFORMATION OPTIONS =====-h, --help, --usageDisplay this help and exit-V, --version, --copyright, --licensePrint license, copyright, and version information and exit-i, --infoShow identity information for device--identify[=[w][nvb]]Show words and bits from IDENTIFY DEVICE data                (ATA)-g NAME, --get=NAMEGet device setting: all, aam, apm, dsn, lookahead, security,wcache, rcache, wcreorder, wcache-sct-a, --allShow all SMART information for device-x, --xallShow all information for device--scanScan for devices--scan-openScan for devices and try to open each device================================== SMARTCTL RUN-TIME BEHAVIOR OPTIONS =====-j, --json[=cgiosuvy]Print output in JSON or YAML format-q TYPE, --quietmode=TYPE                                           (ATA)Set smartctl quiet mode to one of: errorsonly, silent, noserial-d TYPE, --device=TYPESpecify device type to one of:ata, scsi[+TYPE], nvme[,NSID], sat[,auto][,N][+TYPE], usbcypress[,X], usbjmicron[,p][,x][,N], usbprolific, usbsunplus, sntjmicron[,NSID], sntrealtek, intelliprop,N[+TYPE], jmb39x[-q],N[,sLBA][,force][+TYPE], jms56x,N[,sLBA][,force][+TYPE], marvell, areca,N/E, 3ware,N, hpt,L/M/N, megaraid,N, aacraid,H,L,ID, cciss,N, auto, test-T TYPE, --tolerance=TYPE                                           (ATA)Tolerance: normal, conservative, permissive, verypermissive-b TYPE, --badsum=TYPE                                              (ATA)Set action on bad checksum to one of: warn, exit, ignore-r TYPE, --report=TYPEReport transactions (see man page)-n MODE[,STATUS], --nocheck=MODE[,STATUS]                     (ATA, SCSI)No check if: never, sleep, standby, idle (see man page)============================== DEVICE FEATURE ENABLE/DISABLE COMMANDS =====-s VALUE, --smart=VALUEEnable/disable SMART on device (on/off)-o VALUE, --offlineauto=VALUE                                       (ATA)Enable/disable automatic offline testing on device (on/off)-S VALUE, --saveauto=VALUE                                          (ATA)Enable/disable Attribute autosave on device (on/off)-s NAME[,VALUE], --set=NAME[,VALUE]Enable/disable/change device setting: aam,[N|off], apm,[N|off],dsn,[on|off], lookahead,[on|off], security-freeze,standby,[N|off|now], wcache,[on|off], rcache,[on|off],wcreorder,[on|off[,p]], wcache-sct,[ata|on|off[,p]]======================================= READ AND DISPLAY DATA OPTIONS =====-H, --healthShow device SMART health status-c, --capabilities                                            (ATA, NVMe)Show device SMART capabilities-A, --attributesShow device SMART vendor-specific Attributes and values-f FORMAT, --format=FORMAT                                          (ATA)Set output format for attributes: old, brief, hex[,id|val]-l TYPE, --log=TYPEShow device log. TYPE: error, selftest, selective, directory[,g|s],xerror[,N][,error], xselftest[,N][,selftest], background,sasphy[,reset], sataphy[,reset], scttemp[sts,hist],scttempint,N[,p], scterc[,N,M], devstat[,N], defects[,N], ssd,gplog,N[,RANGE], smartlog,N[,RANGE], nvmelog,N,SIZE-v N,OPTION , --vendorattribute=N,OPTION                            (ATA)Set display OPTION for vendor Attribute N (see man page)-F TYPE, --firmwarebug=TYPE                                         (ATA)Use firmware bug workaround:none, nologdir, samsung, samsung2, samsung3, xerrorlba, swapid-P TYPE, --presets=TYPE                                             (ATA)Drive-specific presets: use, ignore, show, showall-B [+]FILE, --drivedb=[+]FILE                                       (ATA)Read and replace [add] drive database from FILE[default is +/etc/smart_drivedb.hand then    /var/lib/smartmontools/drivedb/drivedb.h]============================================ DEVICE SELF-TEST OPTIONS =====-t TEST, --test=TESTRun test. TEST: offline, short, long, conveyance, force, vendor,N,select,M-N, pending,N, afterselect,[on|off]-C, --captiveDo test in captive mode (along with -t)-X, --abortAbort any non-captive test on device=================================================== SMARTCTL EXAMPLES =====smartctl --all /dev/sda                    (Prints all SMART information)smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda(Enables SMART on first disk)smartctl --test=long /dev/sda          (Executes extended disk self-test)smartctl --attributes --log=selftest --quietmode=errorsonly /dev/sda(Prints Self-Test & Attribute errors)smartctl --all --device=3ware,2 /dev/sdasmartctl --all --device=3ware,2 /dev/twe0smartctl --all --device=3ware,2 /dev/twa0smartctl --all --device=3ware,2 /dev/twl0(Prints all SMART info for 3rd ATA disk on 3ware RAID controller)smartctl --all --device=hpt,1/1/3 /dev/sda(Prints all SMART info for the SATA disk attached to the 3rd PMPortof the 1st channel on the 1st HighPoint RAID controller)smartctl --all --device=areca,3/1 /dev/sg2(Prints all SMART info for 3rd ATA disk of the 1st enclosureon Areca RAID controller)

结语

不枉博主详细讲解,欢迎订阅博主–炭烤毛蛋 。

相关文章:

Ubuntu 磁盘修复

Ubuntu 磁盘修复 在 ubuntu 文件系统变成只读模式&#xff0c;该处理呢&#xff1f; 文件系统内部的错误&#xff0c;如索引错误、元数据损坏等&#xff0c;也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误&#xff0c;可能…...

使用RSyslog将Nginx Access Log写入Kafka

个人博客地址&#xff1a;使用RSyslog将Nginx Access Log写入Kafka | 一张假钞的真实世界 环境说明 CentOS Linux release 7.3.1611kafka_2.12-0.10.2.2nginx/1.12.2rsyslog-8.24.0-34.el7.x86_64.rpm 创建测试Topic $ ./kafka-topics.sh --zookeeper 192.168.72.25:2181/k…...

通过Apache、Nginx限制直接访问public下的静态文件

一、Apache 在public目录下的.htaccess文件中添加如下规则&#xff0c;来拒绝除了指定文件类型之外的所有请求 <FilesMatch "\.(?!(jpg|jpeg|png|gif|css|js|ico)$)[^.]$">Order Allow,DenyDeny from all </FilesMatch> 上述配置表示仅允许访问.jpg …...

uniapp小程序中隐藏顶部导航栏和指定某页面去掉顶部导航栏小程序

uniappvue3开发小程序过程中隐藏顶部导航栏和指定某页面去掉顶部导航栏方法 在page.json中 "globalStyle": {"navigationStyle":"custom",}, 如果是指定某个页面关闭顶部导航栏&#xff0c;在style中添加"navigationStyle": "cus…...

Agile Scrum 敏捷开发方法

Agile Scrum 是一种敏捷开发方法&#xff0c;广泛用于软件开发以及其他项目管理领域。它强调迭代式的工作流程、团队协作、灵活应对变化和持续改进&#xff0c;旨在通过快速交付和反馈来最大化项目价值。Scrum 是 Agile&#xff08;敏捷&#xff09;方法中的一种具体实践框架&a…...

【算法与数据结构】—— 回文问题

回文问题 目录 1、简介2、经典的回文问题(1) 判断一个字符串是否为回文(2) 给定字符集求构建的最长回文长度(3) 求最长回文子串方法一&#xff1a;中心拓展方法二&#xff1a;Manacher 算法 (4) 求回文子串的数目方法一&#xff1a;中心拓展方法二&#xff1a;Manacher 算法 1、…...

用vscode写latex-1

一般大伙使用 LaTeX 大体有两种方案&#xff0c; 一种是在本地配置环境或使用本地的软件&#xff0c;如 vscode LaTeX&#xff0c;texlive&#xff0c;lyx 等等&#xff1b; 另一种是线上 LaTeX 平台&#xff0c;其中用的最多的是 Overleaf&#xff0c;还有一部分高校也有自…...

爬虫基础之爬取歌曲宝歌曲批量下载

声明&#xff1a;本案列仅供学习交流使用 任何用于非法用途均与本作者无关 需求分析: 网站:邓紫棋-mp3在线免费下载-歌曲宝-找歌就用歌曲宝-MP3音乐高品质在线免费下载 (gequbao.com) 爬取 歌曲名 歌曲 实现歌手名称下载所有歌曲 本案列所使用的模块 requests (发送…...

GitLab CI/CD使用runner实现自动化部署前端Vue2 后端.Net 7 Zr.Admin项目

1、查看gitlab版本 建议安装的runner版本和gitlab保持一致 2、查找runner 执行 yum list gitlab-runner --showduplicates | sort -r 找到符合gitlab版本的runner&#xff0c;我这里选择 14.9.1版本 如果执行出现找不到下载源&#xff0c;添加官方仓库 执行 curl -L &quo…...

web前端第五次作业---制作菜单

制作菜单 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style…...

软件系统安全逆向分析-混淆对抗

1. 概述 在一般的软件中&#xff0c;我们逆向分析时候通常都不能直接看到软件的明文源代码&#xff0c;或多或少存在着混淆对抗的操作。下面&#xff0c;我会实践操作一个例子从无从下手到攻破目标。 花指令对抗虚函数表RC4 2. 实战-donntyousee 题目载体为具有漏洞的小型软…...

HAMi + prometheus-k8s + grafana实现vgpu虚拟化监控

最近长沙跑了半个多月&#xff0c;跟甲方客户对了下项目指标&#xff0c;许久没更新 回来后继续研究如何实现 grafana实现HAMi vgpu虚拟化监控&#xff0c;毕竟合同里写了需要体现gpu资源限制和算力共享以及体现算力卡资源共享监控 先说下为啥要用HAMi吧&#xff0c; 一个重要原…...

Java基于SSM框架的在线视频教育系统小程序【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…...

mysql本地安装和pycharm链接数据库操作

MySQL本地安装和相关操作 Python相关&#xff1a;基础、函数、数据类型、面向、模块。 前端开发&#xff1a;HTML、CSS、JavaScript、jQuery。【静态页面】 Java前端&#xff1b; Python前端&#xff1b; Go前端 -> 【动态页面】直观&#xff1a; 静态&#xff0c;写死了…...

Unity编程与游戏开发-编程与游戏开发的关系

游戏开发是一个复杂的多领域合作过程,涵盖了从创意构思到最终实现的多个方面。在这个过程中,技术、设计与美术三大核心要素相互交织,缺一不可。在游戏开发的过程中,Unity作为一款强大的跨平台游戏引擎,凭借其高效的开发工具和庞大的社区支持,成为了很多游戏开发者的首选工…...

2025年第三届“华数杯”国际赛A题解题思路与代码(Python版)

游泳竞技策略优化模型代码详解 第一题&#xff1a;速度优化模型 在这一部分&#xff0c;我们将详细解析如何通过数学建模来优化游泳运动员在不同距离比赛中的速度分配策略。 1. 模型概述 我们的模型主要包含三个核心文件&#xff1a; speed_optimization.py: 速度优化的核…...

针对服务器磁盘爆满,MySql数据库始终无法启动,怎么解决

&#xff08;点击即可进入聊天助手&#xff09; 很多站长在运营网站的过程当中都会遇到一个问题,就是网站突然无法打开,数据一直无法启动 无论是强制重启还是,删除网站内的所有应用,数据库一直无法启动 这个时候,就需要常见的运维手段了,需要对服务器后台各个资源,进行逐一排查…...

[Android]service命令的使用

在前面的讨论中,我们说到,如果在客户端懒得使用aidl文件生成的接口类进行binder,可以使用IBinder的transcat方法 Parcel dataParcel = Parcel.obtain(); Parcel resultParcel = Parcel.obtain();dataParcel.writeInterfaceToken(DESCRIPTOR);//发起请求 aProxyBinder.trans…...

【芯片封测学习专栏 -- Substrate | RDL Interposer | Si Interposer | 嵌入式硅桥(EMIB)详细介绍】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewSubstrate&#xff08;衬底或基板&#xff09;Substrate 定义Substrate 特点与作用Substrate 实例 RDL Interposer&#xff08;重布线层中介层&a…...

spring cloud注册nacos并从nacos上拉取配置文件,spring cloud不会自动读取bootstrap.yml文件

目录 踩坑问题记录前言版本说明spring cloudb不会自动读取bootstrap.yml文件问题解决spring cloud注册nacos并从nacos上拉取配置文件后话 踩坑问题记录 1、spring cloudb不会自动读取bootstrap.yml文件 2、spring cloud注册nacos并从nacos上拉取配置文件 前言 使用cloud Ali…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...