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

Linux救援模式之应用篇

挂载并访问文件系统

1. 首先识别分区

fdisk -l       # 查看所有磁盘和分区
lsblk          # 以树状结构查看块设备
blkid          # 查看分区的UUID和文件系统类型

2. 创建挂载点并挂载分区

mkdir /mnt/rescue  # 创建挂载点# 挂载根分区(根据你实际的根分区设备)
mount /dev/sda1 /mnt/rescue  
# 示例,sda1替换为根分区# 如果需要,挂载其他重要分区
mount /dev/sda2 /mnt/rescue/boot
# 挂载/boot分区
mount /dev/sda3 /mnt/rescue/home
# 挂载/home分区

3. 挂载必要的虚拟文件系统(如果要chroot)

mount --bind /dev /mnt/rescue/dev
mount --bind /proc /mnt/rescue/proc
mount --bind /sys /mnt/rescue/sys

4. 访问文件

现在你可以:

直接浏览挂载点下的文件:

ls /mnt/rescue/home/yourusername

或者切换到原系统环境(chroot):

chroot /mnt/rescue

其他情况的处理方式

如果使用Live CD/USB进入救援模式

步骤基本相同,但可能需要先安装工具:

apt-get update && apt-get install e2fsprogs  # Debian/Ubuntu
yum install e2fsprogs                       # RHEL/CentOS

对于LVM分区

vgscan          # 扫描卷组
vgchange -ay    # 激活卷组
lvdisplay       # 显示逻辑卷
mount /dev/mapper/vgname-lvname /mnt/rescue

对于加密分区(LUKS)

cryptsetup luksOpen /dev/sdaX secret
# 然后挂载解密后的设备(通常是/dev/mapper/secret)
mount /dev/mapper/secret /mnt/rescue

注意事项

  1. 挂载时最好使用只读模式先检查:
mount -o ro /dev/sda1 /mnt/rescue
  1. 如果文件系统损坏,先修复再挂载:
fsck /dev/sda1
  1. 操作完成后记得卸载:
umount -R /mnt/rescue

检查与修复文件系统

检查文件系统

对于ext2/ext3/ext4文件系统

# 首先卸载文件系统(如果已挂载)
umount /dev/sdXN# 检查文件系统错误
fsck -y /dev/sdXN
# 其中sdXN是分区标识,如sda1

对于XFS文件系统

xfs_repair /dev/sdXN

对于Btrfs文件系统

btrfs check --repair /dev/sdXN

修复文件系统

超级块损坏(ext文件系统):

# 查找备份超级块
mke2fs -n /dev/sdXN
# 使用备份超级块修复
fsck -b 32768 /dev/sdXN

日志文件损坏:

# 清除日志(ext文件系统)
tune2fs -j /dev/sdXN

强制检查:

fsck -f /dev/sdXN

修复后操作

  1. 重新挂载文件系统检查修复结果

  2. 如果有必要,更新initramfs:

mount /dev/sdXN /mnt
chroot /mnt
update-initramfs -u
  1. 重启系统验证修复效果

注意事项

  • 修复前尽量先备份重要数据

  • 如果根文件系统损坏,可能需要使用live CD/USB

  • 某些严重损坏可能需要从备份恢复

  • 对于SSD,频繁运行fsck可能影响寿命

修复GRUB引导

1. 进入救援模式

2. 挂载根分区

找到根分区(通常是 /dev/sda1 或 /dev/nvme0n1p2,具体取决于磁盘类型和分区方案):

fdisk -l

挂载根分区到 /mnt:

mount /dev/sdXn /mnt

(将 sdXn 替换为根分区,如 /dev/sda2)

挂载必要的虚拟文件系统(如果系统是UEFI启动,还需挂载EFI分区):

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys

对于EFI分区(通常是 /dev/sda1):

mount /dev/sdX1 /mnt/boot/efi

3. Chroot 到原系统

切换根目录到原系统环境:

chroot /mnt

4. 重新安装GRUB

BIOS模式:

grub-install /dev/sdX

(sdX 是磁盘设备,如 /dev/sda,不带分区号)

UEFI模式:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

5. 更新GRUB配置

update-grub

或:

grub-mkconfig -o /boot/grub/grub.cfg

6. 退出并重启

退出chroot环境:

exit

卸载所有挂载的分区:

umount -R /mnt

重启系统:

reboot

常见问题解决

  • 如果GRUB安装失败:
  • 检查是否挂载了正确的分区(尤其是 /boot 或 /boot/efi)。
  • 确保磁盘设备名称正确(如 /dev/sda 而非 /dev/sda1)。
  • 双系统用户:
  • 如果Windows覆盖了GRUB,可能需要重复上述步骤重新安装GRUB。

重置root密码

1. 进入救援模式

重启系统,在 GRUB 启动菜单界面(若未显示,启动时按住 Shift 或 Esc)。

选择默认内核项,按 e 进入编辑模式。

找到以 linux 或 linux16 开头的行,在行尾添加:

rw init=/bin/bash

对于部分系统(如 CentOS 7),可能需要替换为 rw init=/sysroot/bin/sh。

按 Ctrl+X 或 F10 启动到单用户模式(救援环境)。

2. 挂载文件系统(如需)

如果直接进入 bash 提示符(如 Ubuntu),可跳过此步。

对于需要 chroot 的系统(如 CentOS/RHEL):

mount -o remount,rw /         # 确保根文件系统可写
chroot /sysroot               # 切换到原系统环境

3. 重置密码

执行以下命令重置 root 密码:

passwd root

输入两次新密码。

4. 处理 SELinux(仅限启用 SELinux 的系统)

如果系统使用 SELinux(如 CentOS/RHEL),需更新文件系统标签:

touch /.autorelabel  # 下次启动时重新标记 SELinux 上下文

5. 重启系统

exec /sbin/init   # 或直接 reboot

或按 Ctrl+Alt+Del,或执行:

sync; reboot -f

注意事项

  • 物理访问权限:需直接操作服务器或虚拟机控制台。

  • 云服务器:部分云平台(如 AWS、阿里云)需通过控制台使用自定义镜像或用户数据脚本重置密码。

  • 文件系统加密:若 /etc 加密(如 LUKS),需先解密。

替代方案(已知 root 分区)

如果无法通过 GRUB 编辑,可使用 Live CD/USB 启动后挂载根分区:

mkdir /mnt/root
mount /dev/sdXn /mnt/root    # sdXn 为根分区(如 /dev/sda1)
chroot /mnt/root
passwd root

通过以上步骤,可强制重置 root 密码。确保操作后系统安全性,避免未授权访问。

http://www.dtcms.com/a/303697.html

相关文章:

  • 算法第29天|动态规划dp2:不同路径、不同路径Ⅱ、整数拆分、不同的二叉搜索树
  • PHP云原生架构:容器化、Kubernetes与Serverless实践
  • 【人工智能】OpenAI的AI代理革命:通向超拟人交互的未来之路
  • idea 服务器Debug端口启动设置
  • WD5018电压12V降5V,2A电流输出,应用于车载充电器车载设备供电
  • AI-调查研究-41-多模态大模型量化 Qwen2.5-VL:技术架构、能力评估与应用场景详解
  • TOPSIS(Technique for Order Preference by Similarity to Ideal Solution )简介与简单示例
  • Android Slices:让应用功能在系统级交互中触手可及
  • 从0到1理解大语言模型:读《大语言模型:从理论到实践(第2版)》笔记
  • Botanix 主网上线,开启 BTC 可编程新时代!
  • 【ASP.NET Core】探讨注入EF Core的DbContext在HTTP请求中的生命周期
  • Ruby 发送邮件 - SMTP
  • 广泛分布于内侧内嗅皮层全层的速度细胞(speed cells)对NLP中的深层语义分析的积极影响和启示
  • Angular面试题目和答案大全
  • SketchUp纹理贴图插件Architextures安装使用图文教程
  • 深入浅出设计模式——创建型模式之建造者模式
  • vue让elementUI和elementPlus标签内属性支持rem单位
  • nginx 413 Request Entity Too Large
  • uniapp 微信小程序 列表点击分享 不同的信息
  • 重塑浏览器!微软在Edge加入AI Agent,自动化搜索、预测、整合
  • 基于JavaWeb的兼职发布平台的设计与实现
  • Kubernetes 存储入门笔记:从 Volume 到 PVPVC 全解析
  • 【2025年7月29日】TrollStore巨魔商店恢复在线安装
  • 【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(5)——Tool Calling(工具调用)
  • Qt 与 OpenMP 并行编程结合
  • Spring Boot 3.5.x 使用 SpringDoc 2 / Swagger3
  • RTSP协议详解与C++实现实例
  • 01背包问题:Python动态规划深度解析与工程实践
  • 01 基于sklearn的机械学习-机械学习的分类、sklearn的安装、sklearn数据集、数据集的划分、特征工程中特征提取与无量纲化
  • TCP/IP