Logo ryp 的博客

博客

WyOJ 数据抢修并迁移成功

avatar ryp 2026-05-30 13:44:14

由于 WyOJ 主服务器(mei)使用的是一块 120GB 的二手 SSD,已经快要用满。而 mei(一体机改),只有一个完整的 SATA 口,所以即使已经使用了 LVM 也无法扩展。

而近期要上传大量新题目,所以我们不得不想办法扩容。我使用了一块 1T 的希捷机械硬盘,放在机房的出口软路由(wzsss2333)上,用 iSCSI 共享并创建为 PV。

然而,我将 PV 加入原有的卷组(arch)后,意识到根也在 arch 中。具体地说,原来的拓扑为:/dev/arch/root 挂载到根,/dev/arch/data 挂载到 /opt,数据位于 /opt/uoj/uoj_data/web/data。而将 iSCSI 设备加入到 arch 中后,几乎没有办法启动。

具体地,启动时 LVM 会根据 UUID 找 VG 中的 PV,结果发现 iSCSI 盘还不存在,因此无法挂载同在 arch 中的根。解决方法看起来很简单,无非就是在 LVM 启动之前把 iSCSI 拉起来就是了,但是我折腾了很久也丝毫无果。数小时后均失败。

吃饭的时候我就不得不思考快点回退到可用状态了,因为在很长一段时间内我都没有线下操作数小时的机会,所以必须快点用最稳定的方法把 OJ 拉起来。迫不得已的情况下,我缩容了 /dev/arch/data,然后在 Seagate 盘上创建了独立的 VG meiext、LV meiext/webdata。

我耗费 38 分钟执行了 resize2fs /dev/arch/data 60G 将 arch/data 缩容到 60G,并随后缩容 LV、从 VG 中 reduce 去 PV,并创建了新 LV,又耗费了约 20 分钟将数据全部复制到 meiext/webdata 下。

最终,我重新把系统拉起来了。现在的 arch/data 下还有一份 data-old 冗余。先试运行几天,没有问题后再删掉。

local root@mei:~# lsblk
NAME               MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0 111.8G  0 disk
├─sda1               8:1    0   500M  0 part
├─sda2               8:2    0 111.3G  0 part
│ ├─arch-root      253:0    0    32G  0 lvm  /
│ └─arch-data      253:1    0    60G  0 lvm  /opt
└─sda3               8:3    0    12M  0 part
sdb                  8:16   0 931.5G  0 disk
├─sdb1               8:17   0    32G  0 part [SWAP]
└─sdb2               8:18   0 899.5G  0 part
  └─meiext-webdata 253:2    0 674.6G  0 lvm  /opt/uoj/uoj_data/web/data
local root@mei:~# df -h / /opt /opt/uoj/uoj_data/web/data
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/arch-root        32G   13G   18G  42% /
/dev/mapper/arch-data        59G   51G  5.5G  91% /opt
/dev/mapper/meiext-webdata  663G   41G  590G   7% /opt/uoj/uoj_data/web/data

另,mei 的内核已经更新到 7.0.10。

local root@mei:~# uname -a
Linux mei 7.0.10-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 23 May 2026 14:21:20 +0000 x86_64 GNU/Linux

我真的要困死在这里了。

-- upd 15:56 已经清空了 data-old 冗余。

评论

KSCD_
@mike
xuyunao
@mike
zxh_qwq
@mike
ABCDEFG
@

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。

ryp Avatar
我拒绝零假设
活跃度 近 53 周
查看全年