现状:服务器有两个硬盘,200GB 的系统盘和 2TB 的数据盘。
服务器从使用开始就没把 2TB 的数据盘挂载上去使用,现在 200GB 的系统盘容量用尽了,什么都做不了。
现状能想到的解决办法是下面三个,不知道有没有更好的办法?
方案一:把 2TB 的数据盘挂到指定路径,作为数据存储空间使用。
尝试结果:服务器内部部署了非常多的东西,并没有按照规范将数据统一挂载在指定路径。
有一堆没人认领的数据分散在系统盘的各个路径下,也没人敢删敢迁移。
现在如果直接挂载到/data 路径的话,最终还是需要有人把 docker 的挂载卷在内等一系列的数据进行迁移;
方案二:通过 LVM 系统,将 2TB 的数据盘和 200GB 的系统盘合并。
尝试结果:系统盘不挂在 LVM 的逻辑卷上,合并不了;
方案三:找运维给系统盘扩容 。
运维说系统盘可以扩容,但是涉及费用变更的问题,需要走工单。;
1
dier 236 天前
把 2T 盘挂上去,移到 200G 盘的数据到 2T 上去,然后将 2T 盘的路径软链接到 200G 原来的路径
|
2
chauncychan 236 天前 1
给运维搞
|
3
kandaakihito OP @chauncychan 运维说这是测试环境的事情,开发自己解决
|
4
kandaakihito OP @dier 服务器上面跑了 9 个服务,有的在容器有的在物理机,还有很多奇奇怪怪的没人认领的东西,我怎么敢迁移
|
5
BG7ZAG 236 天前 2
@kandaakihito #3 既然是测试环境,就全部重新部署
|
6
Subfire 236 天前 1
测试环境怕啥, 关机后整盘复制
|
7
tywtyw2002 236 天前 via iPhone
kexec 启动个 ramdisk linux 。
然后 dd if =200g of=2t , 最好修复下分区表和逻辑分区。 在调下 grub 完活。 |
8
dode 236 天前
关机,硬盘镜像到新的系统大盘,启动系统就扩容了
|
9
wuxiao2522 236 天前
是按包年包月买的云?如果是的话:把 2TB 数据盘退费,退的费用去扩容系统盘。这样就不用走工单啦。。。
|
10
kandaakihito OP @BG7ZAG 不敢,里面很多东西是 22month ago 的东西不知道是谁的,所有工单文档全部找不到,当初部署的人都不在了,我一个应届生也没有号召力,所以现在唯一可行的方案我觉得可能就是直接开工单扩容系统盘
|
11
colinlikepotatos 236 天前
@kandaakihito 简单啊,关机直接换新的,有问题的喊他自己来部署,千万不要搞其他花里胡哨的,到时候责任就在你了
|
12
kandaakihito OP |
13
kandaakihito OP @wuxiao2522 我这么问过,运维说还是需要走工单
|
14
dier 236 天前
@kandaakihito #4 测试环境能有啥问题。你先把你知道的迁移掉,其它的不清楚的服务停掉,等有人找过来再处理
|
15
qingbaihe 236 天前 1
用这个命令`rsync -axHAWXS --numeric-ids`,我把整个 Linux 系统从一个分区迁移到了另一个分区
|
16
tqyq88 236 天前 1
方案一,200g 数据并不多,过程不复杂。折腾一遍 exp++
|
17
htfcuddles 236 天前 1
方案二可以搞,linux 下没什么不行的,没备份没人敢干
|
18
vivisidea 236 天前 1
看到 docker 我猜大概率是 /var/lib/docker 的锅,你看下是不是这个目录最大,是的话可以先把 docker 停了,把目录挪到 /data/docker ,然后改一下 /etc/docker/daemon.json 改下 data-root 指向 /data/docker ,然后再启动 docker 即可
|
19
kandaakihito OP @colinlikepotatos
是的,我跟领导说了,现在项目都快交付了我瞎搞搞炸了大家一起工期 delay 。领导同意了直接提工单扩容。 那天晚上我加班在搞数据备份,搞着搞着发现数据库炸了,过了五分钟还是无法定位问题害怕是我的问题,就在群里求救了。后面虽然发现不是我的锅,但是当初部署服务器的人和技术领导都不在了,这锅就飞我头上了。 |
20
knightgao2 236 天前 1
我是 lvm 直接扩容的
|
21
kandaakihito OP @vivisidea 是的!一个叫 overlay2 的目录里面塞满了东西。这东西能删吗?
|
22
kandaakihito OP @knightgao2 没有创建任何 pv 和 vg ,如果现在直接把系统盘挂进去估计直接就失联了
|
23
Govda 236 天前 1
阿里云好像可以直接扩吧 印象中搞过一次
|
24
defunct9 236 天前 6
开 ssh ,让我上去看看
|
25
iceecream 236 天前
打了很多字,却什么也没说。
|
26
kandaakihito OP |
27
k1z 236 天前 1
overlay2 应该是有容器中的 pod 日志之类的信息没挂载出来,所以吃了两份空间。 挂载出来, 或者进容器删点日志就可以了。
扩容的话 如果是云服务器的话,应该是可以直接扩容, 在后台直接对硬盘扩容, 如果系统盘只有一个分区挂载在/的话 可以直接 growpart /dev/sda 1 这样来调整分区大小, 然后直接 resize2fs /dev/sda1 就可以扩容了 |
28
kandaakihito OP @k1z growthpart 也需要合并逻辑卷,但是系统盘默认情况下并不属于任何物理卷,昨天找运维了,运维说这种情况下 unmount 再 mount 系统盘,里面数据直接失联
|
29
yc8332 236 天前 1
测试环境有什么好说的。直接搞啊。
|
30
defunct9 236 天前
那还是你自己搞吧
|
31
libook 236 天前 via Android 1
预算给批就采购大系统盘。
不给批就 2T 无损调整分区,把系统迁移上去。200G 太小没啥用,或者你当 swap 用。 |
32
Eillott 236 天前 via iPhone 1
啥项目啊测试环境都不能重启的吗,不应该默认测试环境就是随时没的吗
|
33
dada88xyxy 236 天前 1
方案 3
|
34
hahahahahahahah 236 天前 1
@kandaakihito #21 不能随便删,你可以找找有没有日志,日志可以删
|
35
raptor 236 天前 1
@kandaakihito 这是 docker 的东西,看一下每个容器里的日志占用情况,可以清理一下,但不是长久之计,最好还是重装,用 LVM 以后方便
|
36
kandaakihito OP |
37
liaojl 236 天前 via Android 1
rsync 把系统盘全部挪到数据盘, grub 里再把启动盘改成数据盘。
|
38
lltlo 236 天前 1
我觉得还是很多找出占用空间最大的几个目录,然后用命令找出系统中目前打开的这几个目录的服务,然后先把服务停了,然后把那几个目录改名,再把 2T 盘 mount 那几个目录,然后把数据拷贝过来,最后启动服务测试,ok 的话就可以删除原来的目录了,当然删除之前,你也可以把数据再备份一份到 2T 盘上。
我想这个应该是最安全的办法,如果遇到问题了,直接恢复原来的目录即可。 |
39
dolphintwo 236 天前
"这是测试环境的事情,开发自己解决" 这话像我说的
|
40
fitme 236 天前 1
你都说时/var/lib/docker 下的占满空间,直接挂载 2T 盘->停掉所有容器->mv 数据到新盘->软链接完事,没有风险啊
|
41
fitme 236 天前 1
补充一下,cicd 这种大量镜像首先可以清理(因为肯定推送到镜像仓库了),然后 dockerd 的日志文件大小需要限制
|
42
stcQ2G13k9yxep40 236 天前 1
你们公司运维是只负责软件运维,不负责硬解服务器的运维吗?系统盘扩容这是标准的运维的活啊
|
43
xiaoranj 236 天前 1
直接对拷扩容
|
44
salmon5 236 天前 1
200G 的系统盘在线扩容到 1024G ,2TB 的数据盘释放。还能省一些钱。
|
45
guo4224 236 天前 1
云盘的话在线扩
|
46
salmon5 236 天前 1
@kandaakihito #28 ,CentOS6 的逻辑分区,需要重启系统生效(等于 umount 再 mount ),CentOS7 及以上系统,逻辑分区都支持在线扩容(上层业务无感知)
|
47
salmon5 236 天前 1
在线扩容的前提:
1 ,kvm 虚拟化支持:virsh blockresize 能在线通知 guest VM 感知到 ≥RHEL6.1[2011-05-19] https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/6.1_release_notes/virtualization#:~:text=Virtual%20disk%20online%20dynamic%20resize%20feature 2 ,partition 逻辑分区需要内核支持:fdisk /dev/vdb 删除重建通知内核,内核≥3.6[2012-10-01] 能够支持在线 https://kernelnewbies.org/Linux_3.6#Block:~:text=Add%20a%20new%20operation%20code%20(BLKPG_RESIZE_PARTITION)%20to%20the%20BLKPG%20ioctl%20that%20allows%20altering%20the%20size%20of%20an%20existing%20partition%2C%20even%20if%20it%20is%20currently%20in%20use 3 ,filesystem 文件系统支持:resize2fs,xfs_growfs 这 2 个工具,resize2fs 需要 kernel≥2.6.10[2004-12-24]和 e2fsprogs 1.36[2005-02-05],这一步对应的是 mkfs -t xfs /dev/vdb1 创建 filesystem 环节 |
48
retanoj 236 天前 1
em..如果是我的话
既然是测试环境,那我会排查下硬盘使用大户,然后联系他们迁移数据到另一块硬盘 |
49
kksd0912334 236 天前 1
这是运维的活,即使是测试环境也是运维的活,docker 的 root 目录挂到系统盘这种事情一定是运维的锅,解决办法也很简单,停掉 docker ,复制所有 docker 文件到数据盘,修改 docker 的 root 目录,重启 docker 就搞定了
|
50
brom111 236 天前 1
走工单就走呗。这有啥问题。
|
51
salmon5 236 天前 1
1 ,云控制台先扩容系统盘(云厂商底层的 kvm 会在线扩容对应系统盘的块设备),一般最大不大于 2T 。
2 ,系统盘: ext4: growpart /dev/vda 1 resize2fs /dev/vda1 xfs: growpart /dev/vda 1 xfs_growfs /dev/vda1 如果内核<3.6 ,就重启系统生效;如果内核>=3.6 就在线生效,无需重启。 |
52
78786381 236 天前
你们的运维不行啊
|
53
totoro52 236 天前 1
测试环境怕个得啊 ,直接关机全盘复制到新盘
|
54
ZXiangQAQ 236 天前 1
挂上去,然后把 docker 路径迁移到挂到的路径上,然后软链接回到 /var/lib/docker ,完事
|
55
vivisidea 236 天前 1
@kandaakihito 不能删,删了镜像可能就损坏了,容器可能也起不来,按照我说的挪下 data-root 目录即可
|
56
kandaakihito OP @retanoj pg 数据库的数据目录 91G 现在领导让我迁移,跟着教程走老是报错说指定的新目录 missing or empty
|
57
LLaMA2 236 天前 1
第一步,先在阿里云对系统盘做镜像,除了问题大不了恢复镜像
第二步,先跑完第一步再说 |
58
baobao1270 236 天前 1
如果你们可以用 btrfs/zfs ,那么可以用 subvolume
首先列出所有需要存在数据盘的路径,有很多也没关系 然后每个路径创建一个 subvolume ,把数据迁移进去 然后在 fstab 里配置 subvolume 挂载 |
60
NewLine 236 天前 1
两块盘是不同协议的吗?如果是的话,用 LVM 做逻辑分区也要三思
|
61
wabway 236 天前 1
测试环境不也是运维负责的活么?给运维排期处理就好,还有为啥 cicd 丢在测试服务器上
|
62
nosay 236 天前 1
一般情况下,是无脑方案三的
|
63
seedhk 236 天前 1
稳字第一,方案三。不同意再考虑其他的
|
64
GrayXu 236 天前 1
测试环境直接关机 dd ,云环境直接弹性
|
65
shervy 235 天前 1
可以用 rsync 把 200G 数据全盘全属性同步新盘,将新盘测试开机如果可以就没问题了
|
66
cus 235 天前 1
不是开发环境才是开发的吗?
|
67
guanzhangzhang 235 天前 1
@dier #1 跨分区只能硬链接
|
68
snowyy 235 天前 1
你管那么多呢。老板自己想办法去。
|
69
guanzhangzhang 235 天前 2
看得出来好多人对分区操作没经验
1. 虚拟化的话可以直接增加硬盘大小,然后关机挂载 iso 进 rescue 之类的内存 linux 里,操作扩容分区 end ,可以看我博客 https://zhangguanzhang.github.io/2017/04/20/linux-partition-grow/ 2. du -shx /*,例如看到/var/最大,du -shx /var/* 依次查看,如果是/var/lib/docker 的还好,可以关机后挂载 iso 进 resuce 之类的内存 linux 里,把根分区和 2t 盘都挂载了,例如/mnt/sysroot 和/data ,然后 rsync 把 mnt/sysroot/var/lib/docker 的拷贝到 2t 盘挂载的目录/x/,然后把根分区的/mnt/sysroot/var/lib/docker 改名例如为/mnt/sysroot/var/lib/docker-old ,创建/mnt/sysroot/var/lib/docker 目录。改下根分区里的 fstab 把 2t 挂载到/var/lib/docker 。然后 reboot ,正常后,过几天后就可以把/var/lib/docker-old 干掉 至于上面那些说把根分区的盘 dd 到 2t 的,你重启后可能起不来,uuid 变了,你可能需求修复下引导 grub |
70
retanoj 235 天前 via iPhone
@kandaakihito 检查一下目标文件夹和其内文件的权限呢?
|
71
kandaakihito OP @retanoj 你说对了,我昨天把数据目录路径设置为/data/pgsql/12/data 下面,唯独/data 没给更改 owner 所以一直报错,现在在总结过程了
|
72
way2create 234 天前
小公司没运维就算了 有运维还要你来搞 运维是老板还是老板亲戚?
|
73
samuel97857 231 天前 via Android 1
先把服务停了,然后把整个大目录拷贝到另外一个地方,挂个新的空盘到原来的路径,然后把数据再拷贝回来,重启服务。如果有问题,卸掉挂载重启服务。我之前对/var 目录这样搞过。
|
74
miaosl 212 天前
@kandaakihito 干它这种事情运维不管要他干嘛,我个人建议如果服务可以停得到话,直接硬盘克隆吧那个 200G 的克隆到 2T 上面去,然后直接用那个 2T 的
|
75
kandaakihito OP @miaosl 不中,2T 的是机械盘,会影响性能
|