服务器管理

本文记录服务器管理方面的一些经验。

恢复 rm -rf 删除的数据

出现此类事故后,应立即关机。使用 GParted LiveCD 启动系统,sudo su - 后运行 fdisk -l,找到要恢复的磁盘设备。然后给 GParted 配置 IP 地址和 DNS 服务器。运行 apt install -y extundelete 安装 extundelete。然后直接运行 extundelete /dev/mapper/vg_vol01-home –restore-all,恢复 home 卷下的数据(应先 cd 到挂载的 NFS 目录)。

参考:

H330 阵列卡 HBA 直通模式与 RAID 模式切换

HBA 模式须在 iDrac 中切换,在 UEFI 界面不会生效。

启动 iDrac 虚拟控制台

启动虚拟控制台有 Java 和 HTML5 两种方式。其中 Java 方式会下载一个 .jnlp 文件,需要 JRE 环境,且在运行这个 .jnlp 文件时,会出现签名问题而无法启动。因此需要选择 HTML5 方式启动虚拟控制台。

需要注意的是,iDrac 所使用网口 NIC 选项中,有 Dedicated/LOM1/LOM2/LOM3/LOM4,应选择的是 Dedicated

DELL 存储开机关机顺序

  • 开机:打开 “扩展柜” 电源 -> 等待 5 分钟后,打开 “控制器” 电源 -> 等待 5 分钟后,打开 “服务器” 电源

  • 关机:“服务器” 关机 -> 等待 5 分钟后,“控制器(通过 Storage Manager 执行关机)” -> 等待 5 分钟后,关闭 “扩展柜” 电源

DELL ME5 多路径配置

在 Debian 12(Bookworm) 下,配置对 DELL ME5 的多路径(multipath)会很快。包含以下步骤。

  • 安装 multipath-tools 软件包;

  • 重启机器。然后运行 multipath -lmultipath -v3,根据 DM 多路径下的配置,列出 Dell PowerVault ME5 系列存储设备。

...
===== paths list =====
uuid                              hcil    dev dev_t pri dm_st chk_st vend/prod/rev        dev_st
362cea7f05d1d84002d953761a24b9173 0:2:0:0 sdb 8:16  1   undef undef  DELL,PERC H740P Mini unknown
3600c0ff00065bf8774a1056601000000 1:0:0:0 sda 8:0   10  undef undef  DellEMC,ME5          unknown
3600c0ff00065bf8774a1056601000000 1:0:1:0 sdc 8:32  50  undef undef  DellEMC,ME5          unknown

注意其中的 3600c0ff00065bf8774a1056601000000,其中两个路径的 uuid 是一致的。

  • 修改配置文件 /etc/multipath.conf,该文件是 multipathd 服务的配置文件;
root@backup:~# cat /etc/multipath.conf
defaults {                                                                                                               find_multipaths yes
        user_friendly_names yes
}

blacklist {
}

devices {
        device {
                vendor "DellEMC"
                product "ME5"
                path_grouping_policy "group_by_prio"
                path_checker "tur"
                hardware_handler "1 alua"
                prio "alua"
                failback immediate
                rr_weight "uniform"
                path_selector "service-time 0"
        }
}
multipaths {
        multipath {
                wwid "3600c0ff00065bf8774a1056601000000"
                alias me5_vol01_20t
        }
}
  • 重启服务:systemctl restart multipathd;随后运行 fdisk -l,有以下输出。
root@backup:~# fdisk -l
Disk /dev/sdc: 18.19 TiB, 19999997558784 bytes, 39062495232 sectors
Disk model: ME5
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes


Disk /dev/sda: 18.19 TiB, 19999997558784 bytes, 39062495232 sectors
Disk model: ME5
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes


Disk /dev/sdb: 7.28 TiB, 7999376588800 bytes, 15623782400 sectors
Disk model: PERC H740P Mini
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 262144 bytes / 1048576 bytes
Disklabel type: gpt
Disk identifier: BF366EEC-4128-4E6B-80D2-7EDC93E00A4B

Device        Start         End     Sectors  Size Type
/dev/sdb1      2048      999423      997376  487M Linux filesystem
/dev/sdb2    999424     1499135      499712  244M EFI System
/dev/sdb3   1499136    17123327    15624192  7.5G Linux swap
/dev/sdb4  17123328 15623780351 15606657024  7.3T Linux filesystem


Disk /dev/mapper/me5_vol01_20t: 18.19 TiB, 19999997558784 bytes, 39062495232 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
  • 可以看到 Disk /dev/mapper/me5_vol01_20t: 18.19 TiB, 19999997558784 bytes, 39062495232 sectors 已经出现,随后即可使用磁盘工具对其格式化并加以使用。

Debian 下格式化多路径的块设备

经由 multipathd 建立的多路径下的块设备,比如 /dev/mapper/me5_vol01_20ti,在使用命令 sudo gparted /dev/mapper/me5_vol01_20ti,欲对其进行分区格式化创建文件系统以加以利用时,发现总是会报出 Device or resource busy 错误。

有人的解决办法,是暂时移除多路径设备的映射。步骤如下:

  • 移除多路径设备名字。(multipath -f /dev/mappper/me5_vol01_20ti);

  • 对多路径从设备运行 gparted。(如:sudo gparted /dev/sdb);

  • 重建多路径设备映射。(multipath -r)。

注意:在移除多路径设备时,若多路径设备已被挂载,那么会报出以下错误:

root@backup:~# multipath -f /dev/mapper/me5_vol01_20t
59172.163246 | me5_vol01_20t-part1: map in use

在排除了对该多路径设备的已有挂载后,移除多路径设备的命令将不再报错。

参考:

btrfs 分区的挂载

临时挂载 btrfs 分区,直接运行命令 sudo mount /dev/mapper/me5_vol01_20ti-part1 /0.135,即可把 /dev/mapper/me5_vol01_20ti-part1 挂载到主机的 /0.135 目录下。

要将此挂载设置,写入到 /etc/fstab,就需要先找到 btrfs 设备的信息,通过以下方式之一:

# btrfs filesystem show /mount/point/
# btrfs filesystem show /dev/DEVICE
# btrfs filesystem show /dev/sda
# btrfs filesystem show

比如:

root@backup:~# btrfs filesystem show
Label: none  uuid: e508b096-1641-41aa-96f4-37548f6e33dd
        Total devices 1 FS bytes used 24.56GiB
        devid    1 size 7.27TiB used 45.02GiB path /dev/sdd4

Label: none  uuid: ca060281-526e-4a88-b9f5-296a32624c9b
        Total devices 1 FS bytes used 78.37MiB
        devid    1 size 487.00MiB used 216.00MiB path /dev/sdd1

Label: none  uuid: 8447d73b-fd92-4ee1-9769-af1961ceb79c
        Total devices 1 FS bytes used 144.00KiB
        devid    1 size 195.31GiB used 2.02GiB path /dev/mapper/me5_vol01_20t-part1

mount 命令语法

root@backup:~# mkdir /data/
root@backup:~# mount /dev/mapper/me5_vol01_20t-part1 /data
root@backup:~# btrfs filesystem df /data
Data, single: total=8.00MiB, used=0.00B
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=1.00GiB, used=128.00KiB
GlobalReserve, single: total=3.50MiB, used=0.00B

/etc/fstab 文件语法

首先要找出设备的 UUID,请输入:

# blkid /dev/mapper/me5_vol01_20t-part1

# lsblk --fs /dev/mapper/me5_vol01_20t-part1

将输出:

root@backup:~# blkid /dev/mapper/me5_vol01_20t-part1
/dev/mapper/me5_vol01_20t-part1: UUID="8447d73b-fd92-4ee1-9769-af1961ceb79c" UUID_SUB="04798ed7-4ad0-4ea2-b2e1-154fae497871" BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="2cd4eb20-779e-4c8c-9d73-82280115407e"
root@backup:~# lsblk --fs /dev/mapper/me5_vol01_20t-part1
NAME                FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
me5_vol01_20t-part1 btrfs              8447d73b-fd92-4ee1-9769-af1961ceb79c
root@backup:~# lsblk --fs /dev/mapper/me5_vol01_20t-part2
NAME                FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
me5_vol01_20t-part2 btrfs              34d15471-e8b1-401e-94cd-f4465e6ad4ba

然后编辑 /etc/fstab,下面的语法,是使用 UUID 把 btrfs 设备挂载于 /0.135/me5_vol01_part2 两个挂载点:

UUID=8447d73b-fd92-4ee1-9769-af1961ceb79c /0.135           btrfs   defaults        0       0
UUID=34d15471-e8b1-401e-94cd-f4465e6ad4ba /me5_vol01_part2          btrfs   defaults        0       0

存储文件数量限制导致可用空间为 0

运行 df -i,可以看到 IUse%100%。此时即使存储还有可用空间,程序仍会报出可用空间为 0。解决方法:调整存储的文件数量限制。以 NetApp 为例:

FAS2750::> voloume modify -vserver svm_data -volume tempdata -files 200000000

随后运行 df -i,将显示挂载的存储卷 IUse% 已降至低于 100%

df -i 的示例输出:

% df  -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
tmpfs           122560    624  121936    1% /run                                                                                                                                     /dev/sda       1605632 289295 1316337   19% /
tmpfs           122560      1  122559    1% /dev/shm
tmpfs           122560      3  122557    1% /run/lock
tmpfs            24512     25   24487    1% /run/user/1000

数据备份

#!/usr/bin/env bash

declare -A backup_dir
backup_dir["analog_project"]="/opt"
backup_dir["analog_project/SOS_DATA/repo/analog_project.rep"]="/opt"
backup_dir["analog_project/SOS_DATA/cache/analog_project.cac"]="/opt"

do_backup() {
    if [ ! -d "${2}" ]; then mkdir -p "${2}"; fi
    if [ -d "${1}" ] && [ ! -z "$(ls -A ${1})" ] && [ $(ps -ef | grep "rsync" | grep "${3}" | wc -l) -eq 0 ]; then
        cd "${1}"
        /usr/bin/rsync -cdlptgo --delete --exclude ".snapshot" --exclude "tmp" . ${2}
        find . -maxdepth 1 -type d -not -name "." -not -name ".snapshot" -not -name "tmp" -not -name "SOS_DATA" -exec rsync -crulptgo --delete {} ${2} \;
    fi
}

for name in ${!backup_dir[@]}; do
    do_backup "/${name}" "${backup_dir[$name]}/${name}" $name
done

对于备份数据量大、文件数目多的数据,此备份脚本将其分解为较小的部分,以减小 rsync 所用到增量文件大小,有效提升备份速度。

参考:如何使用 rsync 的高级用法进行大型备份

单向上传通道

建立从办公网到研发内网的单向上传通道,是研发型机构的一般需求。通过 OpenSSH-Server 的配置文件 /etc/ssh/sshd_config,可实现此需求。

在配置文件中,添加如下配置:

Match address 10.11.1.0/24
        ForceCommand internal-sftp -R
        PasswordAuthentication yes

Match address 10.11.2.0/24
        ForceCommand internal-sftp -R
        PasswordAuthentication yes

其中 10.11.1.0/2410.11.2.0/24 分别是两个级别不同的研发网段。如此设置后,便只能从研发网段下载文件数据而无法上传,且无法 SSH 登录。

[hector.peng@vnc03.xfoss.com]$ ssh it@dl.xfoss.com
hector.peng@dl.xfoss.com's password:
This service allows sftp connections only.
Connection to dl.xfoss.com closed.

参考:How to restrict sftp user to read-only access

Last change: 2024-04-25, commit: 421ce5f