05 系统维护
查看系统信息
Windows
在Windows中,按Win + R,输入msinfo32,回车,“系统型号”即是你的电脑型号,“操作系统名称”对应你的Windows的版本。 
Linux发行版
磁盘信息
binzz@C7VF:~$ sudo fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1:953.87 GiB,1024209543168 字节,2000409264 个扇区
磁盘型号:SAMSUNG MZVL21T0HCLR-00B00
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:97E3C2C0-A579-4A23-947E-4FF84D451B08
设备 起点 末尾 扇区 大小 类型
/dev/nvme0n1p1 2048 206847 204800 100M EFI 系统
/dev/nvme0n1p2 206848 239615 32768 16M Microsoft 保留
/dev/nvme0n1p3 239616 462086143 461846528 220.2G Microsoft 基本数据
/dev/nvme0n1p4 462086144 463749119 1662976 812M Windows 恢复环境
/dev/nvme0n1p5 463749120 1143033119 679284000 323.9G Microsoft 基本数据
/dev/nvme0n1p6 1693204480 2000408575 307204096 146.5G Linux 文件系统
/dev/nvme0n1p7 1529028608 1531101183 2072576 1012M Linux 扩展启动
/dev/nvme0n1p8 1531101184 1693204479 162103296 77.3G Linux LVM
/dev/nvme0n1p10 1143033856 1529028607 385994752 184.1G Microsoft 基本数据
分区表记录没有按磁盘顺序。
binzz@C7VF:~$ sudo parted --list
型号: USB SanDisk 3.2Gen1 (scsi)
磁盘 /dev/sda: 123GB
扇区大小 (逻辑/物理):512B/512B
分区表:msdos
磁盘标志:
编号 起始点 结束点 大小 类型 文件系统 标志
1 1049kB 123GB 123GB primary 启动
2 123GB 123GB 33.6MB primary fat16 esp
型号:Linux 设备映射程序 (linear) (dm)
磁盘 /dev/mapper/rl-root: 83.0GB
扇区大小 (逻辑/物理):512B/512B
分区表:loop
磁盘标志:
编号 起始点 结束点 大小 文件系统 标志
1 0.00B 83.0GB 83.0GB xfs
型号:SAMSUNG MZVL21T0HCLR-00B00 (nvme)
磁盘 /dev/nvme0n1: 1024GB
扇区大小 (逻辑/物理):512B/512B
分区表:gpt
磁盘标志:
编号 起始点 结束点 大小 文件系统 名称 标志
1 1049kB 106MB 105MB fat32 EFI System Partition 启动, esp
2 106MB 123MB 16.8MB Microsoft reserved partition msftres
3 123MB 237GB 236GB ntfs Basic data partition msftdata
4 237GB 237GB 851MB ntfs 隐藏, 诊断
5 237GB 585GB 348GB ntfs Basic data partition msftdata
10 585GB 783GB 198GB ntfs Basic data partition msftdata
7 783GB 784GB 1061MB xfs bls_boot
8 784GB 867GB 83.0GB lvm
6 867GB 1024GB 157GB ext4系统信息
lsb_release -a
binzz@C7VF:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Linuxmint
Description: Linux Mint 22.3
Release: 22.3
Codename: zenauname -a
binzz@C7VF:~$ uname -a
Linux C7VF 6.14.0-37-generic #37~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 20 10:25:38 UTC 2 x86_64 x86_64 x86_64 GNU/Linuxcat /etc/os-release
binzz@C7VF:~$ cat /etc/os-release
NAME="Linux Mint"
VERSION="22.3 (Zena)"
ID=linuxmint
ID_LIKE="ubuntu debian" # 很像 Ubuntu 和 Debian,推断这个系统的包管理器和 Ubuntu、Debian 一样,是 dpkg 和 apt
PRETTY_NAME="Linux Mint 22.3"
VERSION_ID="22.3"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=zena
UBUNTU_CODENAME=nobleUbuntu的所有版本可参考:https://zh.wikipedia.org/wiki/Ubuntu
hostnamectl
binzz@C7VF:~$ hostnamectl
Static hostname: C7VF
Icon name: computer-laptop
Chassis: laptop 💻
Machine ID: ba590fba07164ccaa4b48b3ff4d229cd
Boot ID: 6a6e8e6a86604624919acec4e2188abd
Operating System: Linux Mint 22.3
Kernel: Linux 6.14.0-37-generic
Architecture: x86-64
Hardware Vendor: Micro-Star International Co., Ltd.
Hardware Model: Alpha 17 C7VF
Firmware Version: E17KKAMS.119
Firmware Date: Fri 2024-02-16
Firmware Age: 2y 3w 4dneofetch
binzz@C7VF:~$ neofetch
...-:::::-... binzz@C7VF
.-MMMMMMMMMMMMMMM-. ----------
.-MMMM`..-:::::::-..`MMMM-. OS: Linux Mint 22.3 x86_64
.:MMMM.:MMMMMMMMMMMMMMM:.MMMM:. Host: Alpha 17 C7VF REV:1.0
-MMM-M---MMMMMMMMMMMMMMMMMMM.MMM- Kernel: 6.14.0-37-generic
`:MMM:MM` :MMMM:....::-...-MMMM:MMM:` Uptime: 44 mins
:MMM:MMM` :MM:` `` `` `:MMM:MMM: Packages: 3652 (dpkg)
.MMM.MMMM` :MM. -MM. .MM- `MMMM.MMM. Shell: bash 5.2.21
:MMM:MMMM` :MM. -MM- .MM: `MMMM-MMM: Resolution: 2560x1440
:MMM:MMMM` :MM. -MM- .MM: `MMMM:MMM: DE: Cinnamon 6.6.4
:MMM:MMMM` :MM. -MM- .MM: `MMMM-MMM: WM: Mutter (Muffin)
.MMM.MMMM` :MM:--:MM:--:MM: `MMMM.MMM. WM Theme: Mint-X (Mint-Y)
:MMM:MMM- `-MMMMMMMMMMMM-` -MMM-MMM: Theme: Mint-X [GTK2/3]
:MMM:MMM:` `:MMM:MMM: Icons: Mint-X [GTK2/3]
.MMM.MMMM:--------------:MMMM.MMM. Terminal: mate-terminal
'-MMMM.-MMMMMMMMMMMMMMM-.MMMM-' Terminal Font: Ubuntu Sans Mono 15
'.-MMMM``--:::::--``MMMM-.' CPU: AMD Ryzen 9 7945HX with Radeon Graphics (32) @ 5.462GHz
'-MMMMMMMMMMMMM-' GPU: NVIDIA GeForce RTX 4060 Max-Q / Mobile
``-:::::-`` GPU: AMD ATI 05:00.0 Raphael
Memory: 6058MiB / 31257MiBlscpu
binzz@C7VF:~$ lscpu
架构: x86_64
CPU 运行模式: 32-bit, 64-bit
Address sizes: 48 bits physical, 48 bits virtual
字节序: Little Endian
CPU: 32
在线 CPU 列表: 0-31
厂商 ID: AuthenticAMD
型号名称: AMD Ryzen 9 7945HX with Radeon Graphics
CPU 系列: 25
型号: 97
每个核的线程数: 2
每个座的核数: 16
座: 1
步进: 2
Frequency boost: 启用
CPU(s) scaling MHz: 43%
CPU 最大 MHz: 5462.0000
CPU 最小 MHz: 400.0000
BogoMIPS: 4990.43
标记: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm consta
nt_tsc rep_good amd_lbr_v2 nopl xtopology nonstop_tsc cpuid extd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe
popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_c
ore perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba perfmon_v2 ibrs ibpb stibp ibrs_enhanced vmmcall fsgsbase bmi1 avx2 smep bm
i2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves c
qm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local user_shstk avx512_bf16 clzero irperf xsaveerptr rdpru wbnoinvd cppc arat npt lbrv svm_lock nrip_save ts
c_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic vgif x2avic v_spec_ctrl vnmi avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes
vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid overflow_recov succor smca fsrm flush_l1d amd_lbr_pmc_freeze
Virtualization features:
虚拟化: AMD-V
Caches (sum of all):
L1d: 512 KiB (16 instances)
L1i: 512 KiB (16 instances)
L2: 16 MiB (16 instances)
L3: 64 MiB (2 instances)
NUMA:
NUMA 节点: 1
NUMA 节点0 CPU: 0-31
Vulnerabilities:
Gather data sampling: Not affected
Ghostwrite: Not affected
Indirect target selection: Not affected
Itlb multihit: Not affected
L1tf: Not affected
Mds: Not affected
Meltdown: Not affected
Mmio stale data: Not affected
Reg file data sampling: Not affected
Retbleed: Not affected
Spec rstack overflow: Mitigation; Safe RET
Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Spectre v2: Mitigation; Enhanced / Automatic IBRS; IBPB conditional; STIBP always-on; PBRSB-eIBRS Not affected; BHI Not affected
Srbds: Not affected
Tsa: Vulnerable: Clear CPU buffers attempted, no microcode
Tsx async abort: Not affected
Vmscape: Mitigation; IBPB before exit to userspace
binzz@C7VF:~$桌面环境
echo $DESKTOP_SESSION
# 或
echo $XDG_CURRENT_DESKTOP例如GNOME、KDE、XFCE、MATE、Cinnamon等。
核心:chroot命令
chroot将一个目录转化为新的根目录,使系统在该目录下运行,相当于另外开了一个系统。这个新开的系统可以是待修复的系统,也可以是一个用于软件测试的“干净”系统。本文档主要涉及到前者,系统维护。
假设待修复的系统为硬盘上的 Linux1,记为/dev/nvme0n1p11。如何使用chroot新开一个系统?
使用 Live USB 启动 Linux2,是一个临时系统,用于修复 Linux1。Linux2好比医生,Linux1好比病人。
在 Linux2 上挂载 Linux1 的根目录到
/mnt/linux1:bashsudo mount /dev/nvme0n1p11 /mnt/linux1还要挂载其他必要的目录,如
/dev、/proc、/sys等:bashsudo mount --bind /dev /mnt/linux1/dev sudo mount --bind /proc /mnt/linux1/proc sudo mount --bind /sys /mnt/linux1/sys有的小伙伴可能会问,
/dev/nvme0n1p11不是有dev,proc,sys等目录吗,为什么还要挂载它们呢? 将/dev/nvme0n1p11挂载到/mnt/linux1时,确实得到了 Linux1 中的所有目录结构,包括/dev,/proc,/sys等目录。但这些只是空目录,不包含当前运行系统的实际设备文件和内核接口。还需要让被chroot的Linux1 能够: - 访问硬件设备(通过 /dev) - 与内核通信(通过 /proc 和 /sys) - 管理进程信息 - 处理网络连接等 明白了吗?以上一个设备、三个目录只是必要的,有时还会附加其他目录,例如
boot/efi,详情参见修复引导项。现在,我们可以
chroot到/mnt/linux1了。bashsudo chroot /mnt/linux1这时,开启了一个子bash,提示词会变成
root@C7VF:/#,认为/是/mnt/linux1,在这个子bash下执行的命令都来自 Linux1中的可执行文件,且对 Linux1 生效。这些都表示你现在在 Linux1 系统中的环境中。修复完毕后,按一下
Ctrl+D或执行exit,即可退出 Linux1,回到 Linux2。最后,卸载挂载的目录:
bashsudo umount /mnt/linux1/dev sudo umount /mnt/linux1/proc sudo umount /mnt/linux1/sys sudo umount /mnt/linux1
以上是chroot维护系统的基本、通用的流程,如果还不理解,可以参考下面的示例。
示例一:修复NVIDIA显卡驱动
我的电脑是Windows和Ubuntu双系统型。在Ubuntu中对NVIDIA显卡进行了一些操作后,Ubuntu的各种模块都不能加载,有显卡、网卡、有线网络、蓝牙、屏幕亮度调节等,但在Windows里面这些都可以正常使用。所以这属于软件而非硬件问题,且由于Ubuntu因无法连接网络而安装驱动,故欲使用 Live USB 进入一个临时Ubuntu系统,连接网络后进行驱动的重新安装,从而实现修复。
假设现在已经进入 Live USB 系统,且连接了网络,已知硬盘上的Ubuntu系统为/dev/nvme0n1p11,EFI分区(引导项在全部在这里)为/dev/nvme0n1p1。之后的步骤如下:
- 挂载,chroot到硬盘系统bash
# 创建挂载点目录 sudo mkdir /mnt/ubuntu # 挂载根分区 sudo mount /dev/nvme0n1p11 /mnt/ubuntu # 请将 /dev/nvme0n1p11 替换为你实际的根分区 # 挂载虚拟文件系统,这是chroot所必需的 sudo mount --bind /dev /mnt/ubuntu/dev sudo mount --bind /dev/pts /mnt/ubuntu/dev/pts sudo mount --bind /proc /mnt/ubuntu/proc sudo mount --bind /sys /mnt/ubuntu/sys sudo mount --bind /run /mnt/ubuntu/run # 作用:挂载运行时目录,使被chroot的系统能够访问系统运行时的必要文件和目录。 sudo chroot /mnt/ubuntu - 针对硬盘上Ubuntu系统的操作bash
apt update apt upgrade # 清除所有已安装的NVIDIA驱动包 apt remove --purge nvidia-* # 自动安装推荐的NVIDIA驱动 ubuntu-drivers autoinstall # 更新初始化内存盘(initramfs)。 # 这一步至关重要,它确保新安装的驱动和内核模块在下次启动时能被正确加载。 update-initramfs -u -k all # 重新配置GRUB(可选,但推荐) update-grub - 退出chroot环境,卸载所有挂载的分区,重启系统bash
exit sudo umount /mnt/ubuntu/run sudo umount /mnt/ubuntu/sys sudo umount /mnt/ubuntu/proc sudo umount /mnt/ubuntu/dev/pts sudo umount /mnt/ubuntu/dev sudo umount /mnt/ubuntu # 如果直接进行这一步,会提示目标忙 sudo reboot - 重启进入系统后,各个模块应该能正常使用了。
binzz@C7VF:~/Software$ sudo ./cuda_13.0.0_580.65.06_linux.run
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-13.0/
Please make sure that
- PATH includes /usr/local/cuda-13.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-13.0/lib64, or, add /usr/local/cuda-13.0/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-13.0/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 580.00 is required for CUDA 13.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run --silent --driver
Logfile is /var/log/cuda-installer.log
binzz@C7VF:~/Software$示例二:修复引导项
参考:https://gparted.org/display-doc.php?name=help-manual&lang=C#gparted-fix-grub-boot-problem
# 创建挂载点目录
sudo mkdir /mnt/ubuntu
# 挂载根分区
sudo mount /dev/nvme0n1p11 /mnt/ubuntu # 请将 /dev/nvme0n1p11 替换为你实际的根分区
# # 挂载Boot/EFI分区
sudo mount /dev/nvme0n1p1 /mnt/ubuntu/boot/efi # 请替换为你实际的EFI分区
# 挂载虚拟文件系统,这是chroot所必需的
sudo mount --bind /dev /mnt/ubuntu/dev
sudo mount --bind /proc /mnt/ubuntu/proc
sudo mount --bind /sys /mnt/ubuntu/sys
sudo chroot /mnt/ubuntu
# 修复引导项
grub2-install坑点一:挂载点要正确
我掉过这个坑,导致最后重启时除了BIOS外什么系统都进不去!!那就是网站提到的下面一句:
mount /dev/sda3 /tmp/mydir/boot我的引导项在/dev/nvme0n1p1里,但它挂载的是/boot/efi而不是/boot,我忘记了这个差异,按网站的挂载到/tmp/mydir/boot,导致后续grub-install时使引导项的文件结构错误,重启时除了BIOS外什么都进不去。对于这一步,我应该执行的是
mount /dev/nvme0n1p1 /tmp/mydir/boot/efi是该好好了解/boot目录了,参见04-多重引导.md
不算太坑的点二:权限问题
mount需要root权限,需要sudo。
坑点三:是不是GRUB boot loader
网页本身也说了,这段参考成立的前提是"If your computer uses the GRUB boot loader"。怎么知道自己的电脑使用的是不是GRUB boot loader 呢?(而不是像 systemd-boot、rEFInd 或 Windows Boot Manager 这样的其他引导器)可以根据以下几种方法判断:
看开机启动界面 开机时是否出现如下界面:
GNU GRUB version 2.06 ------------------------------------- * Ubuntu Advanced options for Ubuntu Memory test -------------------------------------或者菜单底部写着:
Minimal BASH-like line editing is supported. grub>👉 有这个界面 = 使用GRUB。
如果没有这个界面呢?也不一定不是GRUB引导器,只是可能设置成启动时不出现GRUB界面罢了,要解决不出现GRUB界面的问题,请按如下方法做:
bashnano /etc/default/grub # 找到这行: # GRUB_TIMEOUT_STYLE=hidden # 改为: # GRUB_TIMEOUT_STYLE=menu # 设置GRUB界面倒计时时间(秒) # GRUB_TIMEOUT=10 # 取消注释下面这一行: # GRUB_DISABLE_OS_PROBER=false update-grub进入系统后执行命令检查
bashls /boot/grub如果有输出,说明
/boot/grub目录存在,说明系统安装了 GRUB 引导器。再进一步确认版本:bashgrub-install --version输出例子:
grub-install (GRUB) 2.06查看EFI系统分区下的启动器
bashsudo ls /boot/efi/EFI/输出可能是:
ubuntu fedora BOOT Microsoft然后:
bashsudo ls /boot/efi/EFI/ubuntu可能看到:
grubx64.efi shimx64.efi说明这个系统用的是 GRUB(
grubx64.efi)作为UEFI启动器。使用
efibootmgr查看当前使用的启动项bashsudo efibootmgr输出例子:
BootCurrent: 0001 BootOrder: 0001,0002 Boot0001* ubuntu Boot0002* Windows Boot Manager结合上一个方法看到的是
grubx64.efi,就能确认:👉 当前是通过GRUB引导 Ubuntu 的。
(双保险)检查内核命令行来源
bashcat /proc/cmdline如果你看到的内容类似于:
BOOT_IMAGE=/boot/vmlinuz-6.8.0 root=UUID=... ro quiet splash这通常也是 GRUB 传递的启动参数(不过这一点也可能是 systemd-boot)。
BIOS/UEFI里查看“Boot Options”名称
重启进入 BIOS 设置界面,在 "Boot Order" 或 "Boot Menu" 中:
- 如果看到类似“Ubuntu”或“Debian”,通常是 GRUB 创建的启动项。
- 如果看到“rEFInd”或“systemd-boot”,说明你用的是其他引导器。