V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
kandaakihito
V2EX  ›  Linux

服务器怎么扩容系统盘?

  •  
  •   kandaakihito · 236 天前 · 7403 次点击
    这是一个创建于 236 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现状:服务器有两个硬盘,200GB 的系统盘和 2TB 的数据盘。

    服务器从使用开始就没把 2TB 的数据盘挂载上去使用,现在 200GB 的系统盘容量用尽了,什么都做不了。

    现状能想到的解决办法是下面三个,不知道有没有更好的办法?

    方案一:把 2TB 的数据盘挂到指定路径,作为数据存储空间使用。

    尝试结果:服务器内部部署了非常多的东西,并没有按照规范将数据统一挂载在指定路径。

    有一堆没人认领的数据分散在系统盘的各个路径下,也没人敢删敢迁移。

    现在如果直接挂载到/data 路径的话,最终还是需要有人把 docker 的挂载卷在内等一系列的数据进行迁移;

    方案二:通过 LVM 系统,将 2TB 的数据盘和 200GB 的系统盘合并。

    尝试结果:系统盘不挂在 LVM 的逻辑卷上,合并不了;

    方案三:找运维给系统盘扩容 。

    运维说系统盘可以扩容,但是涉及费用变更的问题,需要走工单。;

    第 1 条附言  ·  235 天前
    真心感谢各位大佬的帮助!给我这个 Linux 小白提供了这么多点子。

    最后我的解决备份是把 pg 数据库的数据目录迁移到数据盘去。

    想看具体操作流程可以去知乎搜索:“记 Postgres 数据库迁移数据目录到新挂载的盘( CentOS7 )| 服务器存储空间不足和扩容”( https://zhuanlan.zhihu.com/p/694826856
    75 条回复    2024-05-20 14:23:03 +08:00
    dier
        1
    dier  
       236 天前
    把 2T 盘挂上去,移到 200G 盘的数据到 2T 上去,然后将 2T 盘的路径软链接到 200G 原来的路径
    chauncychan
        2
    chauncychan  
       236 天前   ❤️ 1
    给运维搞
    kandaakihito
        3
    kandaakihito  
    OP
       236 天前
    @chauncychan 运维说这是测试环境的事情,开发自己解决
    kandaakihito
        4
    kandaakihito  
    OP
       236 天前
    @dier 服务器上面跑了 9 个服务,有的在容器有的在物理机,还有很多奇奇怪怪的没人认领的东西,我怎么敢迁移
    BG7ZAG
        5
    BG7ZAG  
       236 天前   ❤️ 2
    @kandaakihito #3 既然是测试环境,就全部重新部署
    Subfire
        6
    Subfire  
       236 天前   ❤️ 1
    测试环境怕啥, 关机后整盘复制
    tywtyw2002
        7
    tywtyw2002  
       236 天前 via iPhone
    kexec 启动个 ramdisk linux 。
    然后 dd if =200g of=2t , 最好修复下分区表和逻辑分区。 在调下 grub 完活。
    dode
        8
    dode  
       236 天前
    关机,硬盘镜像到新的系统大盘,启动系统就扩容了
    wuxiao2522
        9
    wuxiao2522  
       236 天前
    是按包年包月买的云?如果是的话:把 2TB 数据盘退费,退的费用去扩容系统盘。这样就不用走工单啦。。。
    kandaakihito
        10
    kandaakihito  
    OP
       236 天前
    @BG7ZAG 不敢,里面很多东西是 22month ago 的东西不知道是谁的,所有工单文档全部找不到,当初部署的人都不在了,我一个应届生也没有号召力,所以现在唯一可行的方案我觉得可能就是直接开工单扩容系统盘
    colinlikepotatos
        11
    colinlikepotatos  
       236 天前
    @kandaakihito 简单啊,关机直接换新的,有问题的喊他自己来部署,千万不要搞其他花里胡哨的,到时候责任就在你了
    kandaakihito
        12
    kandaakihito  
    OP
       236 天前
    @Subfire
    @tywtyw2002
    @dode

    感谢,我研究一下
    kandaakihito
        13
    kandaakihito  
    OP
       236 天前
    @wuxiao2522 我这么问过,运维说还是需要走工单
    dier
        14
    dier  
       236 天前
    @kandaakihito #4 测试环境能有啥问题。你先把你知道的迁移掉,其它的不清楚的服务停掉,等有人找过来再处理
    qingbaihe
        15
    qingbaihe  
       236 天前   ❤️ 1
    用这个命令`rsync -axHAWXS --numeric-ids`,我把整个 Linux 系统从一个分区迁移到了另一个分区
    tqyq88
        16
    tqyq88  
       236 天前   ❤️ 1
    方案一,200g 数据并不多,过程不复杂。折腾一遍 exp++
    htfcuddles
        17
    htfcuddles  
       236 天前   ❤️ 1
    方案二可以搞,linux 下没什么不行的,没备份没人敢干
    vivisidea
        18
    vivisidea  
       236 天前   ❤️ 1
    看到 docker 我猜大概率是 /var/lib/docker 的锅,你看下是不是这个目录最大,是的话可以先把 docker 停了,把目录挪到 /data/docker ,然后改一下 /etc/docker/daemon.json 改下 data-root 指向 /data/docker ,然后再启动 docker 即可
    kandaakihito
        19
    kandaakihito  
    OP
       236 天前   ❤️ 1
    @colinlikepotatos

    是的,我跟领导说了,现在项目都快交付了我瞎搞搞炸了大家一起工期 delay 。领导同意了直接提工单扩容。

    那天晚上我加班在搞数据备份,搞着搞着发现数据库炸了,过了五分钟还是无法定位问题害怕是我的问题,就在群里求救了。后面虽然发现不是我的锅,但是当初部署服务器的人和技术领导都不在了,这锅就飞我头上了。
    knightgao2
        20
    knightgao2  
       236 天前   ❤️ 1
    我是 lvm 直接扩容的
    kandaakihito
        21
    kandaakihito  
    OP
       236 天前
    @vivisidea 是的!一个叫 overlay2 的目录里面塞满了东西。这东西能删吗?
    kandaakihito
        22
    kandaakihito  
    OP
       236 天前
    @knightgao2 没有创建任何 pv 和 vg ,如果现在直接把系统盘挂进去估计直接就失联了
    Govda
        23
    Govda  
       236 天前   ❤️ 1
    阿里云好像可以直接扩吧 印象中搞过一次
    defunct9
        24
    defunct9  
       236 天前   ❤️ 6
    开 ssh ,让我上去看看
    iceecream
        25
    iceecream  
       236 天前
    打了很多字,却什么也没说。
    kandaakihito
        26
    kandaakihito  
    OP
       236 天前
    @knightgao2 系统盘不在 vg

    @Govda 可以 走工单 ing

    @defunct9 可以,你先去走个社招流程吧
    k1z
        27
    k1z  
       236 天前   ❤️ 1
    overlay2 应该是有容器中的 pod 日志之类的信息没挂载出来,所以吃了两份空间。 挂载出来, 或者进容器删点日志就可以了。

    扩容的话 如果是云服务器的话,应该是可以直接扩容, 在后台直接对硬盘扩容, 如果系统盘只有一个分区挂载在/的话 可以直接 growpart /dev/sda 1 这样来调整分区大小, 然后直接 resize2fs /dev/sda1 就可以扩容了
    kandaakihito
        28
    kandaakihito  
    OP
       236 天前
    @k1z growthpart 也需要合并逻辑卷,但是系统盘默认情况下并不属于任何物理卷,昨天找运维了,运维说这种情况下 unmount 再 mount 系统盘,里面数据直接失联
    yc8332
        29
    yc8332  
       236 天前   ❤️ 1
    测试环境有什么好说的。直接搞啊。
    defunct9
        30
    defunct9  
       236 天前
    那还是你自己搞吧
    libook
        31
    libook  
       236 天前 via Android   ❤️ 1
    预算给批就采购大系统盘。

    不给批就 2T 无损调整分区,把系统迁移上去。200G 太小没啥用,或者你当 swap 用。
    Eillott
        32
    Eillott  
       236 天前 via iPhone   ❤️ 1
    啥项目啊测试环境都不能重启的吗,不应该默认测试环境就是随时没的吗
    dada88xyxy
        33
    dada88xyxy  
       236 天前   ❤️ 1
    方案 3
    hahahahahahahah
        34
    hahahahahahahah  
       236 天前   ❤️ 1
    @kandaakihito #21 不能随便删,你可以找找有没有日志,日志可以删
    raptor
        35
    raptor  
       236 天前   ❤️ 1
    @kandaakihito 这是 docker 的东西,看一下每个容器里的日志占用情况,可以清理一下,但不是长久之计,最好还是重装,用 LVM 以后方便
    kandaakihito
        36
    kandaakihito  
    OP
       236 天前
    @Eillott
    @raptor

    上面跑了 cicd 、日志收集、两个项目的前后端算法数据库和接口调用
    liaojl
        37
    liaojl  
       236 天前 via Android   ❤️ 1
    rsync 把系统盘全部挪到数据盘, grub 里再把启动盘改成数据盘。
    lltlo
        38
    lltlo  
       236 天前   ❤️ 1
    我觉得还是很多找出占用空间最大的几个目录,然后用命令找出系统中目前打开的这几个目录的服务,然后先把服务停了,然后把那几个目录改名,再把 2T 盘 mount 那几个目录,然后把数据拷贝过来,最后启动服务测试,ok 的话就可以删除原来的目录了,当然删除之前,你也可以把数据再备份一份到 2T 盘上。
    我想这个应该是最安全的办法,如果遇到问题了,直接恢复原来的目录即可。
    dolphintwo
        39
    dolphintwo  
       236 天前
    "这是测试环境的事情,开发自己解决" 这话像我说的
    fitme
        40
    fitme  
       236 天前   ❤️ 1
    你都说时/var/lib/docker 下的占满空间,直接挂载 2T 盘->停掉所有容器->mv 数据到新盘->软链接完事,没有风险啊
    fitme
        41
    fitme  
       236 天前   ❤️ 1
    补充一下,cicd 这种大量镜像首先可以清理(因为肯定推送到镜像仓库了),然后 dockerd 的日志文件大小需要限制
    stcQ2G13k9yxep40
        42
    stcQ2G13k9yxep40  
       236 天前   ❤️ 1
    你们公司运维是只负责软件运维,不负责硬解服务器的运维吗?系统盘扩容这是标准的运维的活啊
    xiaoranj
        43
    xiaoranj  
       236 天前   ❤️ 1
    直接对拷扩容
    salmon5
        44
    salmon5  
       236 天前   ❤️ 1
    200G 的系统盘在线扩容到 1024G ,2TB 的数据盘释放。还能省一些钱。
    guo4224
        45
    guo4224  
       236 天前   ❤️ 1
    云盘的话在线扩
    salmon5
        46
    salmon5  
       236 天前   ❤️ 1
    @kandaakihito #28 ,CentOS6 的逻辑分区,需要重启系统生效(等于 umount 再 mount ),CentOS7 及以上系统,逻辑分区都支持在线扩容(上层业务无感知)
    salmon5
        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 环节
    retanoj
        48
    retanoj  
       236 天前   ❤️ 1
    em..如果是我的话

    既然是测试环境,那我会排查下硬盘使用大户,然后联系他们迁移数据到另一块硬盘
    kksd0912334
        49
    kksd0912334  
       236 天前   ❤️ 1
    这是运维的活,即使是测试环境也是运维的活,docker 的 root 目录挂到系统盘这种事情一定是运维的锅,解决办法也很简单,停掉 docker ,复制所有 docker 文件到数据盘,修改 docker 的 root 目录,重启 docker 就搞定了
    brom111
        50
    brom111  
       236 天前   ❤️ 1
    走工单就走呗。这有啥问题。
    salmon5
        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 就在线生效,无需重启。
    78786381
        52
    78786381  
       236 天前
    你们的运维不行啊
    totoro52
        53
    totoro52  
       236 天前   ❤️ 1
    测试环境怕个得啊 ,直接关机全盘复制到新盘
    ZXiangQAQ
        54
    ZXiangQAQ  
       236 天前   ❤️ 1
    挂上去,然后把 docker 路径迁移到挂到的路径上,然后软链接回到 /var/lib/docker ,完事
    vivisidea
        55
    vivisidea  
       236 天前   ❤️ 1
    @kandaakihito 不能删,删了镜像可能就损坏了,容器可能也起不来,按照我说的挪下 data-root 目录即可
    kandaakihito
        56
    kandaakihito  
    OP
       236 天前
    @retanoj pg 数据库的数据目录 91G 现在领导让我迁移,跟着教程走老是报错说指定的新目录 missing or empty
    LLaMA2
        57
    LLaMA2  
       236 天前   ❤️ 1
    第一步,先在阿里云对系统盘做镜像,除了问题大不了恢复镜像

    第二步,先跑完第一步再说
    baobao1270
        58
    baobao1270  
       236 天前   ❤️ 1
    如果你们可以用 btrfs/zfs ,那么可以用 subvolume
    首先列出所有需要存在数据盘的路径,有很多也没关系
    然后每个路径创建一个 subvolume ,把数据迁移进去
    然后在 fstab 里配置 subvolume 挂载
    LLaMA2
        59
    LLaMA2  
       236 天前   ❤️ 1
    第三步,我也同意 @dier @fitme @ZXiangQAQ 的软链接方案,测试方案,不用搞那么完美。
    第四步,以上操作完成了,又不是不能用!!!
    NewLine
        60
    NewLine  
       236 天前   ❤️ 1
    两块盘是不同协议的吗?如果是的话,用 LVM 做逻辑分区也要三思
    wabway
        61
    wabway  
       236 天前   ❤️ 1
    测试环境不也是运维负责的活么?给运维排期处理就好,还有为啥 cicd 丢在测试服务器上
    nosay
        62
    nosay  
       236 天前   ❤️ 1
    一般情况下,是无脑方案三的
    seedhk
        63
    seedhk  
       236 天前   ❤️ 1
    稳字第一,方案三。不同意再考虑其他的
    GrayXu
        64
    GrayXu  
       236 天前   ❤️ 1
    测试环境直接关机 dd ,云环境直接弹性
    shervy
        65
    shervy  
       235 天前   ❤️ 1
    可以用 rsync 把 200G 数据全盘全属性同步新盘,将新盘测试开机如果可以就没问题了
    cus
        66
    cus  
       235 天前   ❤️ 1
    不是开发环境才是开发的吗?
    guanzhangzhang
        67
    guanzhangzhang  
       235 天前   ❤️ 1
    @dier #1 跨分区只能硬链接
    snowyy
        68
    snowyy  
       235 天前   ❤️ 1
    你管那么多呢。老板自己想办法去。
    guanzhangzhang
        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
    retanoj
        70
    retanoj  
       235 天前 via iPhone
    @kandaakihito 检查一下目标文件夹和其内文件的权限呢?
    kandaakihito
        71
    kandaakihito  
    OP
       235 天前
    @retanoj 你说对了,我昨天把数据目录路径设置为/data/pgsql/12/data 下面,唯独/data 没给更改 owner 所以一直报错,现在在总结过程了
    way2create
        72
    way2create  
       234 天前
    小公司没运维就算了 有运维还要你来搞 运维是老板还是老板亲戚?
    samuel97857
        73
    samuel97857  
       231 天前 via Android   ❤️ 1
    先把服务停了,然后把整个大目录拷贝到另外一个地方,挂个新的空盘到原来的路径,然后把数据再拷贝回来,重启服务。如果有问题,卸掉挂载重启服务。我之前对/var 目录这样搞过。
    miaosl
        74
    miaosl  
       212 天前
    @kandaakihito 干它这种事情运维不管要他干嘛,我个人建议如果服务可以停得到话,直接硬盘克隆吧那个 200G 的克隆到 2T 上面去,然后直接用那个 2T 的
    kandaakihito
        75
    kandaakihito  
    OP
       212 天前
    @miaosl 不中,2T 的是机械盘,会影响性能
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3095 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:43 · PVG 21:43 · LAX 05:43 · JFK 08:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.