Skip to content

05 系统维护

查看系统信息

Windows

在Windows中,按Win + R,输入msinfo32,回车,“系统型号”即是你的电脑型号,“操作系统名称”对应你的Windows的版本。 msinfo32查看系统信息

Linux发行版

磁盘信息

bash
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
bash
binzz@C7VF:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Linuxmint
Description:	Linux Mint 22.3
Release:	22.3
Codename:	zena
uname -a
bash
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/Linux
cat /etc/os-release
bash
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=noble

Ubuntu的所有版本可参考:https://zh.wikipedia.org/wiki/Ubuntu

hostnamectl
bash
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 4d
neofetch
bash
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 / 31257MiB
lscpu
bash
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:~$

桌面环境

bash
echo $DESKTOP_SESSION
# 或
echo $XDG_CURRENT_DESKTOP

例如GNOME、KDE、XFCE、MATE、Cinnamon等。

核心:chroot命令

chroot将一个目录转化为新的根目录,使系统在该目录下运行,相当于另外开了一个系统。这个新开的系统可以是待修复的系统,也可以是一个用于软件测试的“干净”系统。本文档主要涉及到前者,系统维护。

假设待修复的系统为硬盘上的 Linux1,记为/dev/nvme0n1p11。如何使用chroot新开一个系统?

  1. 使用 Live USB 启动 Linux2,是一个临时系统,用于修复 Linux1。Linux2好比医生,Linux1好比病人。

  2. 在 Linux2 上挂载 Linux1 的根目录到 /mnt/linux1

    bash
    sudo mount /dev/nvme0n1p11 /mnt/linux1
  3. 还要挂载其他必要的目录,如 /dev/proc/sys 等:

    bash
    sudo 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,详情参见修复引导项

  4. 现在,我们可以 chroot/mnt/linux1 了。

    bash
    sudo chroot /mnt/linux1

    这时,开启了一个子bash,提示词会变成root@C7VF:/#,认为//mnt/linux1,在这个子bash下执行的命令都来自 Linux1中的可执行文件,且对 Linux1 生效。这些都表示你现在在 Linux1 系统中的环境中。

  5. 修复完毕后,按一下Ctrl+D或执行exit,即可退出 Linux1,回到 Linux2。

  6. 最后,卸载挂载的目录:

    bash
    sudo 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。之后的步骤如下:

  1. 挂载,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
  2. 针对硬盘上Ubuntu系统的操作
    bash
    apt update
    apt upgrade
    
    # 清除所有已安装的NVIDIA驱动包
    apt remove --purge nvidia-*  
    # 自动安装推荐的NVIDIA驱动
    ubuntu-drivers autoinstall 
    
    # 更新初始化内存盘(initramfs)。
    # 这一步至关重要,它确保新安装的驱动和内核模块在下次启动时能被正确加载。
    update-initramfs -u -k all 
    
    # 重新配置GRUB(可选,但推荐)
    update-grub
  3. 退出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
  4. 重启进入系统后,各个模块应该能正常使用了。
bash
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

bash
# 创建挂载点目录
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外什么系统都进不去!!那就是网站提到的下面一句:

bash
mount /dev/sda3 /tmp/mydir/boot

我的引导项在/dev/nvme0n1p1里,但它挂载的是/boot/efi而不是/boot,我忘记了这个差异,按网站的挂载到/tmp/mydir/boot,导致后续grub-install时使引导项的文件结构错误,重启时除了BIOS外什么都进不去。对于这一步,我应该执行的是

bash
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 这样的其他引导器)可以根据以下几种方法判断:

  1. 看开机启动界面 开机时是否出现如下界面:

    GNU GRUB version 2.06
    -------------------------------------
    * Ubuntu
      Advanced options for Ubuntu
      Memory test
    -------------------------------------

    或者菜单底部写着:

    Minimal BASH-like line editing is supported.
    grub>

    👉 有这个界面 = 使用GRUB。

    如果没有这个界面呢?也不一定不是GRUB引导器,只是可能设置成启动时不出现GRUB界面罢了,要解决不出现GRUB界面的问题,请按如下方法做:

    bash
    nano /etc/default/grub
    # 找到这行:
    # GRUB_TIMEOUT_STYLE=hidden
    # 改为:
    # GRUB_TIMEOUT_STYLE=menu
    # 设置GRUB界面倒计时时间(秒)
    # GRUB_TIMEOUT=10
    # 取消注释下面这一行:
    # GRUB_DISABLE_OS_PROBER=false
    
    update-grub
  2. 进入系统后执行命令检查

    bash
    ls /boot/grub

    如果有输出,说明 /boot/grub 目录存在,说明系统安装了 GRUB 引导器。再进一步确认版本:

    bash
    grub-install --version

    输出例子:

    grub-install (GRUB) 2.06
  3. 查看EFI系统分区下的启动器

    bash
    sudo ls /boot/efi/EFI/

    输出可能是:

    ubuntu  fedora  BOOT  Microsoft

    然后:

    bash
    sudo ls /boot/efi/EFI/ubuntu

    可能看到:

    grubx64.efi  shimx64.efi

    说明这个系统用的是 GRUBgrubx64.efi)作为UEFI启动器。

  4. 使用 efibootmgr 查看当前使用的启动项

    bash
    sudo efibootmgr

    输出例子:

    BootCurrent: 0001
    BootOrder: 0001,0002
    Boot0001* ubuntu
    Boot0002* Windows Boot Manager

    结合上一个方法看到的是 grubx64.efi,就能确认:

    👉 当前是通过GRUB引导 Ubuntu 的。

  5. (双保险)检查内核命令行来源

    bash
    cat /proc/cmdline

    如果你看到的内容类似于:

    BOOT_IMAGE=/boot/vmlinuz-6.8.0 root=UUID=... ro quiet splash

    这通常也是 GRUB 传递的启动参数(不过这一点也可能是 systemd-boot)。

  6. BIOS/UEFI里查看“Boot Options”名称

    重启进入 BIOS 设置界面,在 "Boot Order" 或 "Boot Menu" 中:

    • 如果看到类似“Ubuntu”或“Debian”,通常是 GRUB 创建的启动项。
    • 如果看到“rEFInd”或“systemd-boot”,说明你用的是其他引导器。