唠唠闲话
p.s. 这几篇博客我其实想找机会整理起来,按一定的逻辑重新梳理。但仔细一想,这上边花时间是要掂量的。
而且,我发现,我们做某个事情的动机,往往只在特定时候会很强烈,借助这个强烈的感觉会事半功倍。而当前也一样,就借着我们强烈的事情来推进吧。
言归正传,本篇我们要讲什么呢?
动机:最近教学楼停电整修,服务器断电导致 boot 损坏,开机异常。尝试了重新安装 grub 以及 boot-repair 等方案,都没有效果。而且这些方案的实践调试通常也要花很多时间。那么,有没有简单粗暴的处理方式呢。
嗯,没错,提前备份。
本篇是作为亡羊补牢的教程。在 grub 无法修复,但系统盘还能读取的情况下。我们在新盘上重装系统,并把一些环境还原回来。本篇就是记录相关的信息的。
系统盘制作和重装系统可以参考 『服务器硬盘维护 | 学习笔记 』 这一篇。
本篇主要内容:
rsync 还原主要数据
重新挂载 home 目录,还原指定用户,并保持 pid
个人便好的一键设置。
另外,这篇不完全是教程性质,也因为实验室缘故,这里操作更多是特定于实验室的情况。写在博客上,更多是方便个人记录,如果同步到其他平台会再修改。
因此,这里也有一些杂记。
TODO list
查看硬盘信息
查看硬盘信息,当前是在实验室台式上操作,把硬盘拿出来了:
1 2 3 4 5 6 > bash getdevices.sh | 硬盘设备 | 类型 | 容量 | 使用时间 | 逻辑卷 | 挂载目录 | |--------------|--------|--------|---------------------|----------------|----------------| | /dev/sda | 机械 | 931.5G | 27959 h (3.19 年) | None | /cdrom | | /dev/sdb | 固态 | 3.6T | 31 h (0 年) | None | /target | | /dev/sdc | 固态 | 3.6T | 24650 h (2.81 年) | None | MOUNTPOINT |
可以看到 /dev/sdb
是一个新盘,也就是我们刚重装的硬盘。/dev/sdc
是旧系统盘。
脚本 getdevices.sh
见附录。
然后是查看 lsblk 看挂载信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 > lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 2.7G 1 loop /rofs loop1 7:1 0 4K 1 loop /snap/bare/5 loop2 7:2 0 74.2M 1 loop /snap/core22/1122 loop3 7:3 0 497M 1 loop /snap/gnome-42-2204/141 loop4 7:4 0 266.6M 1 loop /snap/firefox/3836 loop5 7:5 0 91.7M 1 loop /snap/gtk-common-themes/1535 loop6 7:6 0 452K 1 loop /snap/snapd-desktop-integration/83 loop7 7:7 0 40.4M 1 loop /snap/snapd/20671 loop8 7:8 0 12.3M 1 loop /snap/snap-store/959 sda 8:0 0 931.5G 0 disk ├─sda1 8:1 0 18.6G 0 part /cdrom └─sda2 8:2 0 912.9G 0 part sdb 8:16 0 3.6T 0 disk ├─sdb1 8:17 0 512M 0 part └─sdb2 8:18 0 3.6T 0 part sdc 8:32 0 3.6T 0 disk ├─sdc1 8:33 0 1M 0 part ├─sdc2 8:34 0 513M 0 part └─sdc3 8:35 0 3.6T 0 part
查看 uuid 信息
1 2 3 4 > blkid /dev/sda1: LABEL="M-MM-uM-VM-AM-:M-j" UUID="1D18-2535" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="6259861b-01" /dev/sdb1: UUID="9B0E-CBFB" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="8879cdab-e646-4979-8e23-33b855abf63c" /dev/sdc2: UUID="31F3-1A09" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="8216e8a7-0003-4e3b-83fb-89837d7203fa"
这是刚重装的系统。测试前,先重启一下,确保重装正常,能正常开机,然后再来进行数据拷贝。
chroot 挂载
设置挂载目录:
1 2 3 MOUNT_PATH=/mnt/ubuntu mkdir -p $MOUNT_PATH mkdir -p $MOUNT_PATH /backup
挂载系统盘和旧盘:
1 2 sudo mount /dev/sdb2 $MOUNT_PATH sudo mount /dev/sdc3 $MOUNT_PATH /backup
需要挂载系统文件系统和伪终端,才能正常执行 apt 等命令。
1 2 3 4 5 sudo mount /dev --bind $MOUNT_PATH /dev sudo mount /dev/pts --bind $MOUNT_PATH /dev/pts sudo mount /proc --bind $MOUNT_PATH /proc sudo mount /sys --bind $MOUNT_PATH /sys sudo mount /run --bind $MOUNT_PATH /run
这里 --bind
将一个目录"绑定"到另一个目录,一边的改动立即反映到另一边。
进入系统:
在执行所有操作后,我们按顺序需要取消挂载,通常和挂载顺序相反,避免目录层级问题:
1 2 3 4 5 6 7 8 sudo umount $MOUNT_PATH /run sudo umount $MOUNT_PATH /sys sudo umount $MOUNT_PATH /proc sudo umount $MOUNT_PATH /dev/pts sudo umount $MOUNT_PATH /dev sudo umount $MOUNT_PATH /backup sudo umount $MOUNT_PATH
除了 chroot 挂载,也可以直接把硬盘安装到服务器,在服务器里挂载。
文件备份
备份文件:
1 2 3 4 5 6 7 8 9 10 BACKUP_DIR=$HOME /workspace/backup/map mkdir -p $BACKUP_DIR MOUNT_PATH=/mnt/ubuntu sudo ddrescue -f /dev/sdb1 $BACKUP_DIR /map-efi.img sudo rsync -a $MOUNT_PATH /boot $BACKUP_DIR /map-boot
下次如果 efi 错误,直接还原覆盖 /dev/sdb1 以及 boot 文件夹。
目录还原
根据需要,还原重要的目录:
1 2 3 4 5 6 7 8 rsync -a /backup/srv/ /srv rsync -a /backup/root/.ssh /root/
初始化系统配置(参考个人博客):
1 2 3 4 5 6 7 8 9 10 11 12 sudo update-pciids lspci | grep -i vga sudo ubuntu-drivers autoinstall wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb sudo gdebi cuda-keyring_1.1-1_all.deb sudo apt-get update sudo apt-get -y install cuda-toolkit-12-9
若干 APT 环境依赖
https://www.wzhecnu.cn/2021/08/20/server/02-ubuntu-basicapp/
修改 ssh 配置(手动)。
批量创建用户
主要文件位置:
/etc/passwd - 用户基本信息(用户名、uid、gid、home目录、shell等)
/etc/group - 组信息(组名、gid、组成员等)
/etc/shadow - 用户密码信息(加密密码、密码策略等)
done
个人用户配置
其他配置
安装驱动。