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