From b20866f6f8aba1492e84e6fabf02e2f486a8bc4c Mon Sep 17 00:00:00 2001 From: Hayashi Date: Thu, 9 Jul 2026 12:08:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0debian=E5=BC=80=E6=9C=BA?= =?UTF-8?q?=E7=A3=81=E7=9B=98=E6=8C=82=E8=BD=BD=E4=BB=A5=E5=8F=8Adocker?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=90=AF=E5=8A=A8=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...™¨æ ¸å¿ƒé…置指å—:ç£ç›˜é˜µåˆ—与 Docker 安全å¯åЍ.md | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 Debian æœåŠ¡å™¨æ ¸å¿ƒé…置指å—:ç£ç›˜é˜µåˆ—与 Docker 安全å¯åЍ.md diff --git a/Debian æœåŠ¡å™¨æ ¸å¿ƒé…置指å—:ç£ç›˜é˜µåˆ—与 Docker 安全å¯åЍ.md b/Debian æœåŠ¡å™¨æ ¸å¿ƒé…置指å—:ç£ç›˜é˜µåˆ—与 Docker 安全å¯åЍ.md new file mode 100644 index 0000000..98c3ba4 --- /dev/null +++ b/Debian æœåŠ¡å™¨æ ¸å¿ƒé…置指å—:ç£ç›˜é˜µåˆ—与 Docker 安全å¯åЍ.md @@ -0,0 +1,170 @@ +# Debian æœåŠ¡å™¨æ ¸å¿ƒé…置指å—:ç£ç›˜é˜µåˆ—与 Docker 安全å¯åЍ + +本文档旨在规范 Debian æœåŠ¡å™¨çš„åº•å±‚å­˜å‚¨æŒ‚è½½ä¸Žå®¹å™¨æœåŠ¡å¯åЍæµç¨‹ï¼Œç¡®ä¿æ•°æ®æŒä¹…åŒ–å®‰å…¨åŠæœåŠ¡åœ¨ç³»ç»Ÿå¼‚å¸¸æ¢å¤åŽçš„自动接管能力。 + +## 1 核心æµç¨‹ +挂载ç£ç›˜é˜µåˆ— +| + ↓ + 超过30ç§’åŽç›´æŽ¥è¿›ç³»ç»Ÿ + | + ↓ +docker.service +| + ↓ +Requires + | + ↓ +docker-mount-guard.service +| +↓ +检查挂载 +| +↓ +æˆåŠŸ +| +↓ +Dockerå¯åЍ + + +## 2 ç£ç›˜é˜µåˆ—挂载é…ç½® + +为防止系统å¯åŠ¨æ—¶å› é˜µåˆ—æœªå°±ç»ªå¯¼è‡´è¿›å…¥ç´§æ€¥æ¨¡å¼ï¼ˆEmergency Mode),必须采用 `nofail` 傿•°å¹¶æ­£ç¡®é…置文件系统类型。 + +### 2.1 ç¡®è®¤é˜µåˆ—è®¾å¤‡ä¿¡æ¯ +在修改é…ç½®å‰ï¼ŒåŠ¡å¿…ç¡®è®¤é˜µåˆ—çš„ UUID åŠæ–‡ä»¶ç³»ç»Ÿç±»åž‹ï¼Œé¿å…使用 `/dev/sdX` 等易å˜è®¾å¤‡å。 + +```bash +# 查看阵列 UUID åŠæ–‡ä»¶ç³»ç»Ÿç±»åž‹ +sudo blkid /dev/md0 +# 输出示例: /dev/md0: UUID="a1b2c3d4-..." TYPE="ext4" +``` + +### 2.2 编辑挂载é…ç½® +编辑 `/etc/fstab` 文件,添加阵列挂载项。 + +```bash +sudo nano /etc/fstab +``` + +在文件末尾添加以下é…置: + +```text +# Disk Array Mount Configuration +UUID=a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/data ext4 defaults,nofail,x-systemd.device-timeout=30s 0 2 +``` + +**关键傿•°è¯´æ˜Žï¼š** +- `nofail`:**æ ¸å¿ƒå®‰å…¨å‚æ•°**。若阵列åˆå§‹åŒ–失败或设备ä¸å­˜åœ¨ï¼Œç³»ç»Ÿå°†è·³è¿‡è¯¥æŒ‚载点继续å¯åŠ¨ï¼Œè€Œéžç›´æŽ¥è¿›å…¥ç´§æ€¥æ¨¡å¼ã€‚ +- `x-systemd.device-timeout=30s`:设置 systemd 等待设备就绪的超时时间,防止因阵列åˆå§‹åŒ–慢导致å¯åŠ¨è¶…æ—¶ã€‚ +- `0 2`:ç¦ç”¨å¯åŠ¨æ—¶è‡ªåŠ¨æ£€æŸ¥ï¼ˆ`0`ï¼‰ï¼Œæˆ–è®¾ç½®ä¸ºéžæ ¹åˆ†åŒºæ£€æŸ¥é¡ºåºï¼ˆ`2`),é¿å…阵列过大导致å¯åŠ¨é˜»å¡žã€‚ + +### 2.3 验è¯é…ç½® +**切勿直接é‡å¯**,必须先验è¯é…ç½®è¯­æ³•åŠæŒ‚è½½å¯ç”¨æ€§ã€‚ + +```bash +# éªŒè¯ fstab è¯­æ³•æ˜¯å¦æ­£ç¡® +sudo findmnt --verify --verbose + +# å°è¯•釿–°æŒ‚载所有 fstab æ¡ç›®ï¼ˆä¸ä¸­æ–­å½“å‰ä¼šè¯ï¼‰ +sudo mount -a +``` + +> **注æ„**:若 `mount -a` æŠ¥é”™ï¼Œè¯·ç«‹å³æ£€æŸ¥å¹¶ä¿®æ­£ `/etc/fstab`ï¼Œç¡®è®¤æ— è¯¯åŽæ–¹å¯é‡å¯ã€‚ + +## 3 开机 Docker 检查å¯åŠ¨æœºåˆ¶ + +ä¸ºç¡®ä¿ Docker æœåŠ¡åœ¨ç³»ç»Ÿæ¢å¤åŽèƒ½è‡ªåŠ¨æ‹‰èµ·ï¼Œå¹¶å…·å¤‡å¥åº·æ£€æŸ¥èƒ½åŠ›ï¼Œéœ€é…ç½® Systemd ä¾èµ–与é‡å¯ç­–略。 + +### 3.1 第一步:创建“安检脚本†+写个简å•çš„ bash 脚本,专门检查你关心的那几个挂载点(/mnt/a1-files 等)。åªè¦æœ‰ä¸€ä¸ªæ²¡æŒ‚载,就报错退出。 +```bash +sudo nano /usr/local/bin/check-docker-mounts.sh +``` +把下é¢è¿™æ®µä»£ç å¤åˆ¶è¿›åŽ»ï¼š +```bash +#!/bin/bash +# å®šä¹‰éœ€è¦æ£€æŸ¥çš„æŒ‚载点数组(包å«ä½ æ‰€æœ‰çš„阵列盘) +MOUNTS=( + "/mnt/a1-files" + "/mnt/a2-temp" + "/mnt/b1-variety" + "/mnt/c1-music" + "/mnt/c2-history" + "/mnt/c3-movie" + "/mnt/d1-tv-cn" + "/mnt/d2-manga" + "/mnt/d3-tv-jk" +) + +for mnt in "${MOUNTS[@]}"; do + # æ£€æŸ¥è¯¥è·¯å¾„æ˜¯å¦æ˜¯ä¸€ä¸ªçœŸæ­£çš„æŒ‚载点 + if ! mountpoint -q "$mnt"; then + echo "错误:挂载点 $mnt 未就绪ï¼é˜»æ­¢ Docker å¯åŠ¨ã€‚" + exit 1 + fi +done + +echo "所有关键挂载点检查通过,å…许 Docker å¯åŠ¨ã€‚" +exit 0 +``` +ä¿å­˜é€€å‡ºåŽï¼Œç»™å®ƒåŠ ä¸Šå¯æ‰§è¡Œæƒé™ï¼š +```bash +sudo chmod +x /usr/local/bin/check-docker-mounts.sh +``` + +### 3.2 第二步:创建一个 systemd æœåŠ¡æ¥â€œæ‹¦æˆªâ€ Docker +我们è¦è®©ç³»ç»Ÿåœ¨æ‰§è¡Œ Docker 之å‰ï¼Œå¿…须先跑一é这个脚本。 +```bash +sudo nano /etc/systemd/system/docker-mount-guard.service +``` +把下é¢è¿™æ®µä»£ç å¤åˆ¶è¿›åŽ»ï¼š +```bash +[Unit] +Description=Check Mount Points Before Docker Starts +Before=docker.service +RequiresMountsFor=/mnt/a1-files /mnt/a2-temp /mnt/b1-variety /mnt/c1-music /mnt/c2-history /mnt/c3-movie /mnt/d1-tv-cn /mnt/d2-manga /mnt/d3-tv-jk + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/check-docker-mounts.sh +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target +``` +ä¿å­˜é€€å‡ºã€‚ +### 3.3 第三步:让é…置生效 +```bash +sudo systemctl daemon-reload +sudo systemctl enable docker-mount-guard.service +``` + +### 3.4 第四步:给 Docker 加上强ä¾èµ– +使用 tee å‘½ä»¤ç›´æŽ¥å¼ºè¡Œåˆ›å»ºå¹¶å†™å…¥è¿™ä¸ªæ–‡ä»¶ï¼Œæœ€æš´åŠ›ã€æœ€ç¨³å¦¥ï¼ +直接把下é¢è¿™ä¸€æ•´æ®µå¤åˆ¶åˆ°ç»ˆç«¯é‡Œæ•²å›žè½¦ï¼š +```ash +sudo mkdir -p /etc/systemd/system/docker.service.d +sudo tee /etc/systemd/system/docker.service.d/override.conf > /dev/null << 'EOF' +[Unit] +Requires=docker-mount-guard.service +After=docker-mount-guard.service +EOF +``` +敲完之åŽï¼Œå†æ•²ä¸€ä¸‹è¿™ä¸ªè®©å®ƒç”Ÿæ•ˆï¼š +```bash +sudo systemctl daemon-reload +``` +怎么验è¯å®ƒçœŸçš„生效了? +直接看 systemd 的“最终åˆå¹¶ç»“æžœâ€ã€‚你敲一下这个命令: +```bash +systemctl cat docker +``` +这个命令会把 Docker 的原始é…置和你刚æ‰å†™çš„ override é…置拼在一起显示出æ¥ã€‚ +你拉到最下é¢ï¼Œä¸€å®šä¼šçœ‹åˆ°ç±»ä¼¼è¿™æ ·çš„输出: +``` +[Unit] +Requires=docker-mount-guard.service +After=docker-mount-guard.service +``` +åªè¦çœ‹åˆ°è¿™æ®µï¼Œå°±è¯´æ˜Žé…ç½® 100% 完美生效了ï¼