Posted in: linux, Seafile

扩容Seafile磁盘空间

扩容Seafile磁盘空间

因为默认Seafile安装位置额空间仅剩不到10G,所以需要扩展Seafile的数据存储空间
seafile使用容器安装在centOS7中,其数据存储在/opt目录下,在确定扩容方案前需要确定:

扩容前准备

1. 查看/opt目录占用空间大小

[nick@192 ~]$ sudo du -sh /opt
35G     /opt

可以看到目录对应的占用的空间是35G

2. 确认剩余空间,查看目录分区类型,即/opt目录是根分区还是逻辑卷

  • df -h查看挂载点
[nick@192 ~]$ df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.8G     0  3.8G   0% /dev
tmpfs                    3.8G     0  3.8G   0% /dev/shm
tmpfs                    3.8G   18M  3.8G   1% /run
tmpfs                    3.8G     0  3.8G   0% /sys/fs/cgroup
/dev/mapper/centos-root  400G   43G  358G  11% /
/dev/mapper/centos-home   57G 1008M   56G   2% /home
/dev/sdb1               1014M  192M  823M  19% /boot
tmpfs                    775M     0  775M   0% /run/user/1000

df 命令的输出中,‌Filesystem‌ 表示系统中已挂载的存储设备或文件系统的名称。它对应具体的存储单元(如硬盘分区、虚拟文件系统等),用于标识不同存储资源的来源或类型.
常见示例

  1. 物理设备
    /dev/sda2/dev/nvme0n1p3 等,表示实际的硬盘分区。
  2. 虚拟文件系统
    tmpfs(内存驻留的临时文件系统)、devtmpfs(设备文件系统)等
  • 继续查看df -h /opt挂载点
[nick@192 ~]$ df -h /opt
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  400G   43G  358G  11% /

从结果可以确认/opt目录对应逻辑卷挂载关系,挂载点为/,文件系统设备名/dev/mapper/centos-root,可用空间358G(扩容后的结果)

  • 在 Linux 系统中,‌**/dev/mapper‌ 是逻辑卷管理(LVM)相关的设备映射目录,表示通过 LVM 创建的‌逻辑卷(Logical Volume)**‌。LVM 的核心组件:
    • ‌**物理卷(PV)**‌:指实际的硬盘或分区(如 /dev/sda1)。
    • ‌**卷组(VG)**‌:由多个物理卷组成的存储池。
    • ‌**逻辑卷(LV)**‌:从卷组中划分出的虚拟分区,对应 /dev/mapper 下的设备名(如 /dev/mapper/vg_data-lv_root
  • dflsblk 等命令的输出中,若出现 /dev/mapper/xxx 形式的设备名,通常表示该存储单元由 LVM 动态管理,而非直接对应物理硬盘分区.
  • df 显示 /dev/mapper 路径时,表明该文件系统基于 LVM 逻辑卷创建,具有动态扩展、灵活调整存储空间等优势.
  • /dev/mapper 设备是对物理硬盘的抽象,实际数据可能分布在多个物理分区或硬盘上,可通过 lvdisplaylsblk 命令查看逻辑卷的具体组成和关联的物理设备
  • 使用lvdisplay查看逻辑卷
[nick@192 dev]$ sudo lvdisplay
[sudo] password for nick:
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                lk0Fm6-nUAf-Ip2Y-kV0F-EHuX-yaoz-HRMupP
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-08-22 16:26:33 +0800
  LV Status              available
  # open                 2
  LV Size                7.75 GiB
  Current LE             1984
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                H7Ww1G-cF4l-3bab-SehI-YzZN-ddvM-mR5zry
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-08-22 16:26:36 +0800
  LV Status              available
  # open                 1
  LV Size                400.00 GiB
  Current LE             102400
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/centos/home
  LV Name                home
  VG Name                centos
  LV UUID                y41Wdv-s19W-onBm-KFMm-xACp-tRJR-f9tZl8
  LV Write Access        read/write
  LV Creation host, time 192.168.0.120, 2025-04-29 15:23:56 +0800
  LV Status              available
  # open                 1
  LV Size                57.00 GiB
  Current LE             14592
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

可以看到结果中的逻辑卷路径/dev/centos/root,逻辑卷名称root,卷组名称centos

  • 使用lsblk查看磁盘列表和分区类型
[nick@192 ~]$ lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0 465.8G  0 disk
├─sda2            8:2    0  11.8G  0 part
├─sda3            8:3    0 224.1G  0 part
├─sda4            8:4    0     1K  0 part
└─sda5            8:5    0   225G  0 part
sdb               8:16   0 465.8G  0 disk
├─sdb1            8:17   0     1G  0 part /boot
└─sdb2            8:18   0 464.8G  0 part
  ├─centos-root 253:0    0   400G  0 lvm  /
  ├─centos-swap 253:1    0   7.8G  0 lvm  [SWAP]
  └─centos-home 253:2    0    57G  0 lvm  /home
sdc               8:32   0 238.5G  0 disk
├─sdc1            8:33   0  39.2M  0 part
├─sdc2            8:34   0  11.9G  0 part
└─sdc3            8:35   0 226.6G  0 part

可以从结果中看到共有3块物理磁盘sda,sdb,sdc,以及各自的分区,仅仅挂载了sdb

lsblk 用于以树状结构显示系统中所有块设备(如硬盘、分区、逻辑卷等)的层级关系和基本信息,适用于快速查看磁盘拓扑结构、分区布局及挂载点。TYPE为设备类型:disk(物理磁盘)、part(分区)、lvm(逻辑卷)等
未挂载的硬盘显示为 TYPE="disk" 且无 MOUNTPOINT 信息(如 /dev/sdb

  • 继续使用lsblk查看/dev/mapper/centos-root的分区
[nick@192 ~]$ sudo lsblk /dev/mapper/centos-root
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
centos-root 253:0    0  400G  0 lvm  /

[nick@192 ~]$ lsblk | grep -E "centos-root|centos-home"
  ├─centos-root 253:0    0   400G  0 lvm  /
  └─centos-home 253:2    0    57G  0 lvm  /home

通过上面结果可以确认目录/opt对应的设备/dev/mapper/centos-root是挂载在物理磁盘sdb分区sdb2逻辑卷(LV)centos-root

3. 查看此分区设备/逻辑卷的文件系统类型

[nick@192 ~]$ sudo blkid /dev/mapper/centos-root
[sudo] password for nick:
/dev/mapper/centos-root: UUID="09df98d9-66a7-4b38-a9ec-37091905e36f" TYPE="xfs"
[nick@192 dev]$ sudo blkid /dev/centos/root
[sudo] password for nick:
/dev/centos/root: UUID="09df98d9-66a7-4b38-a9ec-37091905e36f" TYPE="xfs"

[nick@192 ~]$ sudo blkid /dev/mapper/centos-home
/dev/mapper/centos-home: UUID="7355112c-6763-4620-8f82-19c6edd8e516" TYPE="xfs"

以上结果可以确认文件系统类型是xfs

  • XFS文件系统‌不支持直接缩减逻辑卷空间‌(lvreduce),强行操作会导致数据损坏。但支持在线扩展逻辑卷(lvextend)后使用xfs_growfs调整文件系统.替代方案‌:需通过删除原逻辑卷(lvremove)→重建新逻辑卷(lvcreate)的方式调整空间,扩展逻辑卷后,可直接通过xfs_growfs在线调整文件系统,无需卸载分区。
  • EXT4文件系统调整需配合resize2fs命令

扩展方案

方案一,使用同一个硬盘另一个分区的空间扩容seafile所在分区(最终选择这个方法)

这个方案是把centos-home逻辑卷的可用空间扩展到centos-root中。
得益于该文件系统基于 LVM 逻辑卷创建,具有动态扩展、灵活调整存储空间等优势,但是由于文件系统类型是xfs,不支持直接缩减逻辑卷空间,所以第一个方案是删除原逻辑卷centos-home,之后扩展centos-root逻辑卷并扩展文件系统。
具体步骤如下:

一、数据备份与预处理

  1. 备份/home目录‌:

考虑到后续需要解挂载/home目录,所以先备份/home/目录内容

mkdir /backup
tar -zcvf /backup/home.tar.gz /home/*   

新建backup并备份到其中

  1. 终止占用进程‌:

强制终止占用/home的进程

fuser -km /home   # 强制终止占用/home的进程,`-km`参数会终止所有占用`/home`的进程,解决卸载时的“设备忙”报错

处理fuser命令缺失问题

  1. 安装psmisc软件包
 sudo yum install psmisc -y  # CentOS/RHEL系统安装fuser命令
  1. 验证安装结果
    which fuser  # 检查命令路径,正常应输出`/usr/bin/fuser`
    
  2. 重新执行原命令
    sudo fuser -km /home  # 强制终止占用/home目录的进程
    

二、释放目标空间

因为不能使用lvreduce缩减centos-home逻辑卷,所以首先卸载/home并删除逻辑卷

  1. 卸载逻辑卷‌:

    umount /home   # 卸载/home挂载点
    

    若提示target is busy,再次执行fuser -km /home

  2. 删除原home逻辑卷‌:

    lvremove /dev/mapper/centos-home   # 输入y确认删除
    

    删除逻辑卷报错 Logical volume centos/home contains a filesystem in use.强制终止占用进程并卸载逻辑卷

    1. 终止所有占用进程‌:
      sudo fuser -km /home  # 强制终止所有使用/home的进程
      
    2. 再次尝试卸载逻辑卷‌:
      sudo umount /home      # 确认卸载操作
      
    3. 验证卸载状态‌:
      mount | grep '/home'   # 输出为空表示已卸载
      
    4. 执行逻辑卷删除‌:
      sudo lvremove /dev/mapper/centos-home  # 此时应无报错
      
    操作注意事项
    • 数据风险‌:强制终止进程可能导致未保存数据丢失,操作前务必验证备份完整性
    • 服务影响‌:若发现关键系统进程(如sshddbus-daemon)占用,建议在维护窗口操作
    • 异常处理‌:若仍提示filesystem in use,需排查是否存在残留挂载点或NFS共享等隐藏依赖

三、空间重新分配

  1. 扩展root逻辑卷‌:

    lvextend -L +350G /dev/mapper/centos-root   # 增加350G空间
    
  2. 调整文件系统‌:

    xfs_growfs /dev/mapper/centos-root   # XFS文件系统适用
    
  3. 重建home逻辑卷‌:

    lvcreate -L 57G -n home centos   # 假设原home有407G,保留57G
    mkfs.xfs /dev/centos/home         # 按原文件系统类型格式化
    

四、挂载恢复与验证

  1. 挂载新home逻辑卷‌:

    mount /dev/mapper/centos-home /home
    tar -zxvf /backup/home.tar.gz -C /home/   # 数据恢复
    
  2. 持久化配置‌:

    vi /etc/fstab   # 确认home挂载条目设备路径正确
    
  3. 空间验证‌:

    df -h /home /   # 确认root增加350G,home缩减至57G
    

方案二,给主机添加新硬盘并将seafile的数据存储空间配置到新硬盘上

一、检测新硬盘

  1. 查看磁盘列表

    lsblk
    

    未挂载的硬盘显示为 TYPE="disk" 且无 MOUNTPOINT 信息(如 /dev/sdb
    补充验证命令‌:

    fdisk -l
    

    fdisk -l 用于列出系统中所有磁盘及分区的详细信息,包括设备名称、分区表结构、起始结束扇区、分区类型和文件系统类型等。该命令需管理员权限执行

  2. 确认硬盘路径
    新硬盘通常命名为 /dev/sdb/dev/sdc(按添加顺序命名),容量与预期一致

二、分区与格式化

  1. 创建分区

    fdisk /dev/sdb
    

    交互操作顺序:

    • n → 新建分区
    • p → 主分区(默认覆盖整个硬盘)
    • 连续按回车接受默认值
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p    # 选择主分区
Partition number (1-4, default 1): 1   # 分区编号
First sector (2048-20971519, default 2048):  # 起始扇区(默认回车)
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +200M  # 指定分区大小
  • 创建LVM逻辑卷,设置类型为8e
Command (m for help): t
Partition number (1-3, default 3): 3  # 选择目标分区
Hex code (type L to list all codes): 8e  # 设置类型为 Linux LVM
Changed type of partition 'Linux filesystem' to 'Linux LVM'.

  • w → 保存分区表13
Command (m for help): w
The partition table has been altered!

  1. 刷新分区表
    partprobe /dev/sdb
    

之后可以新建物理卷并将新物理卷加入到之前的卷组中达到扩展
3. ‌创建新分区并加入LVM‌:

pvcreate /dev/sdb1
  1. 验证物理卷创建‌:

    pvs # 简要查看PV列表
    
    [nick@192 dev]$ sudo pvs
    [sudo] password for nick:
    PV         VG     Fmt  Attr PSize    PFree
    /dev/sdb2  centos lvm2 a--  <464.76g 8.00m
    
  2. 扩展卷组‌:
    将新物理卷加入现有卷组

    vgextend centos /dev/sdb1   # 将新物理卷加入卷组
    
  3. 扩展逻辑卷并应用‌:

    lvextend -l +100%FREE /dev/mapper/centos-root
    xfs_growfs /dev/mapper/centos-root   # XFS文件系统适用
    
  4. 检查扩容结果‌:

    df -h /opt   # 确认空间已增加
    
  5. ‌**修改挂载配置(如路径变更)**‌:

    echo "/dev/mapper/centos-root / xfs defaults 0 0" >> /etc/fstab
    
    • 仅当挂载路径或设备变更时需修改fstab

或者挂载为新的目录之后再修改seafile数据存储目录
3. ‌格式化分区

mkfs -t ext4 /dev/sdb1  # 格式化为 ext4 文件系统

(支持替换为 xfs 等其他格式,需与系统其他分区一致)

三、挂载硬盘

  1. 创建挂载目录

    mkdir /mnt/new_disk  # 目录名可自定义(需为空目录)
    
  2. 临时挂载

    mount /dev/sdb1 /mnt/new_disk
    

    验证挂载结果:

    df -h | grep /mnt/new_disk
    
  3. 永久挂载
    编辑 /etc/fstab 文件,添加:

    /dev/sdb1  /mnt/new_disk  ext4  defaults  0  0
    

    执行命令生效:

    mount -a
    

四、验证与维护

  1. 重启验证

    reboot
    df -h  # 检查挂载点是否自动加载
    
  2. ‌**权限调整(可选)**‌
    若需指定目录权限:

    chmod 755 /mnt/new_disk  # 设置目录权限
    chown user:group /mnt/new_disk  # 修改属主和属组
    

关键注意事项

  1. 分区类型选择
    • 单个分区建议使用主分区(p
    • 多分区需创建扩展分区(e)后再划分逻辑分区
  2. 文件系统一致性
    建议与系统其他分区使用相同格式(如 ext4xfs),避免兼容性问题
  3. 挂载目录要求
    目标目录必须为空,否则原有文件会被隐藏但不会被删除

Leave a Reply

Back to Top