标签 Linux 下的文章

本教程适用于将 Microsoft 365 E5 开发者订阅(MSDN)的 5TB OneDrive 空间挂载为 Linux 本地磁盘。当然也适用其他版本的空间挂载,但是需要自己根据实际情况做出修改。

请输入图片描述

一、 基础准备在开始之前,请确保你拥有 MSDN 管理员账号,并在 Linux 服务器上安装 fuse3(挂载必需依赖)。

# 1. 安装 Rclone
curl https://rclone.org/install.sh | sudo bash
# 2. 安装 FUSE 依赖
# Ubuntu / Debian:
apt update && apt install -y fuse3
# CentOS / AlmaLinux:
yum install -y fuse3
# 3. 修正 FUSE 权限配置(允许非 root 用户访问)
sed -i 's/#user_allow_other/user_allow_other/g' /etc/fuse.conf

二、 Rclone 配置步骤

执行 rclone config
按照以下逻辑操作:n) New remote: 输入名称 onedrive
Storage Type: 输入 42 (Microsoft OneDrive)
client_id/client_secret: 直接回车跳过
region: 输入 1 (global)
Edit advanced config: 输入 n
Use auto config: 输入 n (因为是远程服务器)获取
Token:在你的本地电脑

  • (Windows/Mac)下载 Rclone。
  • 在本地终端运行:rclone authorize "onedrive"
  • 浏览器弹出授权,登录 MSDN 账号并确认。
  • 将本地终端生成的 {"access_token":...} 整个 JSON 字符串复制。回到服务器粘贴。

config_type: 输入 1 (OneDrive Personal or Business)
Drive Selection: 搜索到 5TB 盘后,输入序号 0。
Confirm: 输入 y 确认,最后输入 q 退出。

三、 手动挂载测试创建挂载点并尝试手动挂载,确认没有报错:

# 创建挂载点
mkdir -p /mnt/onedrive

# 手动挂载命令(测试用)
rclone mount onedrive:/ /mnt/onedrive \
  --vfs-cache-mode writes \
  --vfs-cache-max-size 50G \
  --allow-other \
  --header "Referer:https://onedrive.live.com/" \
  --vfs-read-chunk-size 16M \
  --vfs-read-chunk-size-limit 1G \
  --buffer-size 64M \
  --daemon

使用 df -h 查看是否出现了 5TB 的磁盘。

四、 配置开机自动挂载 (Systemd)为了保证服务器重启后自动挂载,建议配置系统服务。

1. 创建服务文件

nano /etc/systemd/system/rclone.service

2. 粘贴以下内容(请确保 /usr/bin/rclone 路径正确,可用 which rclone 查看)

[Unit]
Description=Rclone OneDrive Mount
After=network-online.target

[Service]
Type=simple
# 核心挂载命令
ExecStart=/usr/bin/rclone mount onedrive:/ /mnt/onedrive \
    --vfs-cache-mode writes \
    --vfs-cache-max-size 50G \
    --vfs-cache-max-age 24h \
    --allow-other \
    --header "Referer:https://onedrive.live.com/" \
    --vfs-read-chunk-size 16M \
    --vfs-read-chunk-size-limit 1G \
    --buffer-size 64M \
    --dir-cache-time 5m \
    --low-level-retries 10
# 停止时卸载
ExecStop=/bin/fusermount3 -qzu /mnt/onedrive
Restart=on-failure
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target

3. 启用服务

//先卸载之前手动挂载的路径
fusermount3 -qzu /mnt/onedrive
//启用并启动服务
systemctl daemon-reload
systemctl enable rclone
systemctl start rclone
//检查状态
systemctl status rclone

五、 常用维护指令汇总

目的                        命令

验证 5TB 容量 rclone about onedrive:
查看实时挂载日志 journalctl -u rclone -f
重启挂载服务 systemctl restart rclone
强制卸载挂载点 fusermount3 -qzu /mnt/onedrive
清空 OneDrive 回收站 建议去网页端操作,可释放 Trashed 占用的配额

以我的环境来作为示例:
我的 NAS 信息:
NAS IP:10.0.2.12
NAS 用户名:etotakeo
NAS 密码:ng057720
NAS 共享目录:Ext_Flies/Linux备份(自己进去nas确定路径)
`root@DiskStation:/volume2/Ext_Files/Linux整盘备份# pwd
/volume2/Ext_Files/Linux整盘备份`
假设 NAS 用的是 SMB 共享(群晖/威联通常见)
这说明你在 NAS 本机(DiskStation) 上看到的目录。
如果你要从 Linux 主机 上挂载这个目录,通常需要通过 SMB 或 NFS 协议 访问。
比如:
SMB 地址://10.0.2.12/Ext_Files/Linux整盘备份
NFS 地址(如果你在 DSM 里启用了 NFS):10.0.2.12:/volume2/Ext_Files/Linux整盘备份

创建挂载点

sudo mkdir -p /mnt/nas

挂载 NAS

把 NAS SMB 路径挂载到 /mnt/nas:

sudo mount -t cifs //10.0.2.12/Ext_Flies/Linux备份 /mnt/nas \
   -o username=etotakeo,password=ng057720,vers=3.0,iocharset=utf8

iocharset=utf8 保证中文目录不会乱码。
确认挂载成功:

df -h | grep nas

初始化 Restic 仓库

先设置密码(写入文件,避免每次输入):

echo "your-restic-password" > /root/.restic-pw
chmod 600 /root/.restic-pw

初始化仓库:

export RESTIC_REPOSITORY=/mnt/nas
export RESTIC_PASSWORD_FILE=/root/.restic-pw
restic init

注意:为了避免备份一些不必要或会导致问题的目录(例如 /proc、/sys、/dev 等),我们需要排除掉它们。

新建一个排除文件:

nano /root/restic-excludes.txt

内容写入(常见排除目录):

/dev/*
/proc/*
/sys/*
/tmp/*
/run/*
/mnt/*
/media/*
/lost+found

执行备份:

restic backup / --exclude-file=/root/restic-excludes.txt

这样就会把系统整盘数据备份到 NAS 的 /mnt/nas 仓库。

设置定时备份(每天一次)

编辑 cron 任务:

crontab -e

添加一行(每天凌晨 2 点执行一次):

0 2 * * * RESTIC_REPOSITORY=/mnt/nas RESTIC_PASSWORD_FILE=/root/.restic-pw /usr/bin/restic backup / --exclude-file=/root/restic-excludes.txt

这样每天都会自动备份一次。
每个月备份一次,最多只保留5份

0 3 1 * * RESTIC_REPOSITORY=/mnt/nas RESTIC_PASSWORD_FILE=/root/.restic-pw /usr/bin/restic backup / --exclude-file=/root/restic-excludes.txt && RESTIC_REPOSITORY=/mnt/nas RESTIC_PASSWORD_FILE=/root/.restic-pw /usr/bin/restic forget --keep-last 5 --prune

查看已有备份快照

restic snapshots

如果这里运行的时候提示:

Fatal: Please specify repository location (-r or --repository-file)

那么试试

restic -r /mnt/nas --password-file /root/.restic-pw snapshots

可以看到每次备份的时间和 ID。

恢复数据

你可以按需恢复:
恢复整个系统到某个目录(比如 /restore):

restic restore latest --target /restore

这样会把最近的整盘备份恢复到 /restore 目录。
恢复单个文件或目录(例如 /etc/hosts):

restic restore latest --target /restore --include /etc/hosts

恢复后你可以从 /restore/etc/hosts 拷贝出来。

NAS 再同步到 OneDrive

你已经说 NAS 会自动备份到 OneDrive,那 restic 在 NAS 上生成的备份文件也会自动被同步上去,等于实现了 本地 + NAS + 云端 三重备份。

在本文中,我将分享如何在 Debian Linux 服务器上通过命令行方式配置 OneDrive 同步工具,实现:

  • 同步 OneDrive 上某个文件夹
  • 自动下载(不上传)
  • 实时监控同步
  • 后台运行
  • 随开机自动启动

适用于无桌面的服务器环境,例如通过 SSH 登录的 VPS。


✅ 安装 OneDrive 同步客户端(abraunegg 版)

首先安装依赖并从源码编译:

sudo apt update
sudo apt install -y ldc pkg-config git curl build-essential libcurl4-openssl-dev libsqlite3-dev libdbus-1-dev

git clone https://github.com/abraunegg/onedrive.git
cd onedrive
./configure
make
sudo make install

✅ 授权 OneDrive 登录

首次运行会提示你复制一个授权链接:

onedrive

复制链接到本地浏览器访问,登录并授权后,将跳转到一个以 https://login.microsoftonline.com/common/oauth2/nativeclient?... 开头的地址。把这个完整链接复制回 SSH 终端,回车完成授权


✅ 设置同步目录配置(可选)

你可以指定本地同步目录和忽略某些临时文件:

编辑配置文件:

mkdir -p ~/.config/onedrive
nano ~/.config/onedrive/config

内容示例:

# 设置本地同步目录(可选)
sync_dir = "/root/ca"
# 忽略临时文件(可选)
skip_file = "~*|.~*|*.tmp|*.swp|*.partial"
# 这里根据你的cpu线程自行修改
threads = "1" 

❗️注意:不能在 config 文件中使用 single_directory 参数,它只能通过命令行传入。


✅ 只同步 OneDrive 某个文件夹

使用 --single-directory 参数:

onedrive --monitor --single-directory "qbit" --download-only
  • 只会同步 OneDrive 上的 qbit(是你同步的) 文件夹
  • 不会上传本地文件改动(只下载)

✅ 后台运行 OneDrive 实时同步

使用 nohup 方式运行:

nohup onedrive --monitor --single-directory "qbit" --download-only > /var/log/onedrive.log 2>&1 &

✅ 设置 systemd 用户服务实现开机自启

步骤 1:创建 systemd 服务文件(有两个自行选择,推荐使用第一个,第二个是经常强制关闭的时候使用会主要目的是为了重建数据库)

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/onedrive.service

内容如下(常用):

[Unit]
Description=OneDrive Sync Service (Single Directory)
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/onedrive --monitor --single-directory "qbit" 
Restart=always
RestartSec=10
Environment=XDG_CONFIG_HOME=/root/.config
StandardOutput=append:/root/onedrive.log
StandardError=append:/root/onedrive.log

[Install]
WantedBy=default.target

内容如下(如果经常强制终止的建议用这个):

[Unit]
Description=OneDrive Sync Service (Single Directory)
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/bin/bash -c '/usr/local/bin/onedrive --single-directory "qbit" --resync --sync || true; exec /usr/local/bin/onedrive --monitor --single-directory "New"'
Restart=always
RestartSec=10
Environment=XDG_CONFIG_HOME=/root/.config
StandardOutput=append:/root/onedrive.log
StandardError=append:/root/onedrive.log

[Install]
WantedBy=default.target
注意:请根据 which onedrive 调整 ExecStart 路径
尝试执行一次带 --resync --sync 的同步。如果成功或失败 (|| true),继续。
如果只需要下载,那就在/usr/local/bin/onedrive --monitor --single-directory "qbit"后面加上 --download-only上传同理

题外话

如果你觉得日志可能会越写越多,可以设置一个定时,让他每隔多久运行一次清理日志。
创建脚本
nano /root/clear_onedrive_log.sh

#!/bin/bash
# 清空 OneDrive 日志
truncate -s 0 /root/onedrive.log

给脚本加执行权限

chmod +x /root/clear_onedrive_log.sh

设置定时任务(每 10 天执行一次)
编辑 crontab:

crontab -e

添加一行(每 10 天的 0 点执行一次):

0 0 */10 * * /root/clear_onedrive_log.sh

解释:
0 0 /10 * → 每个月的第 1、11、21…天 0:00 执行
脚本执行后会清空 /root/onedrive.log

步骤 2:启用并启动服务

loginctl enable-linger $(whoami)
systemctl --user daemon-reexec
systemctl --user daemon-reload
systemctl --user enable onedrive.service
systemctl --user start onedrive.service

检查运行状态:

systemctl --user status onedrive.service

方便网页查看同步进度,运行一下这个命令

bash -c "$(curl -fsSL https://sh.digac.icu/shell/onedrivelog.sh)"

✅ 升级 cURL(可选)

如果出现如下警告:

WARNING: Your cURL/libcurl version (7.88.1) has known HTTP/2 bugs ...
echo "deb http://deb.debian.org/debian bookworm-backports main" \
  | sudo tee /etc/apt/sources.list.d/backports.list
apt-get update
apt-get -t bookworm-backports install curl

说明你的系统使用了存在兼容性问题的旧版 curl,但客户端已自动回退使用 HTTP/1.1。为最佳体验,你可以手动升级 curl 到 7.92+,或者忽略该提示继续使用。

什么都不说了直接复制粘贴吧。 大佬原本是用的CNFaster的机器,我用的是Hetzner的机器+储存卷。大致的步骤都是差不多的,只不过有小部分有问题,通过gpt(真的是一个好东西)解决了,下面进入正题(部分图片直接偷盗)。 所以这篇教程旨在通过重装**将系统盘转换成lvm管理,并且将数据盘和系统盘合二为一**,直接搓成一个完整的大盘。

使用一键重装脚本,并重启到 netboot.xyz(可使用商家后台 VNC 手动安装)

curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh || wget -O reinstall.sh $_
bash reinstall.sh netboot.xyz
reboot

这个是我的


重启后,从Hetzner后台进入vnc

  • 进入 netboot.xyz

    输入后台提供的网络IP 子网掩码

    网关(事实证明Hetzner不需要自己手动设置ip这些)

    选择网络安装

    选择系统和版本(debian12)


    进入图形化安装界面

    设置语言,一路默认

    (我喜欢用中文,所以我选择了中文,键盘布局选择美国英语就行了)

    手动设置网络

    填入后台提供的IP地址掩码网关,DNS我用了8.8.8.8(Hetzner不需要,自动通过HDCP完成配置)

    这里的主机名可以随便


    设置root和新建账户密码


    这里会重新新建一个账户,这个是一会儿安装完毕之后登录的账户,之后在切换到root账户去

    **选择设置lvm管理硬盘** **(重要)**


    写入更改




    开始安装系统

  • 仅安装系统必要和ssh server

**设置grub**(**重要**)



引导安装完成,重启

**注意**:默认只支持用户账户登陆,所以用用户账户登陆后开启root ssh登陆

su

echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
systemctl restart ssh

开始扩容啦

然后使用exit断开连接,重新连接使用root用户登录

查看分区表

lsblk


显示sdb下面没有sdb1则继续,如果有sdb1则直接跳到“刷新分区”
运行 fdisk /dev/sdbparted /dev/sdb`来创建一个新的分区:

这时会提示红色的

不用管直接继续
fdisk 命令提示符下,按照以下步骤执行:

- n(新建分区)

  • 选择 p(主分区)
  • 1(分区号 1)
  • 直接回车(使用默认起始扇区)
  • 直接回车(使用整个磁盘)
  • t(修改分区类型)
  • 输入 8e(设置为 Linux LVM)
  • w(写入并退出)


安装parted用来刷新分区表

apt-get update
apt-get install parted -y

**刷新分区表**

有时候系统不会立即识别新分区,所以执行:

partprobe /dev/sdb

**检查分区**

确保 <code>/dev/sdb1</code> 存在:

lsblk /dev/sdb


然后运行,接下来的步骤要根据这里反馈的内容操作

lsblk
vgs
lvs

创建物理卷

pvcreate /dev/sdb1

扩展volume

vgextend static-vg /dev/sdb1

拓展所有剩余空间至逻辑卷

lvextend -l +100%FREE /dev/static-vg/root

resize卷,并查看是否添加成功

resize2fs /dev/static-vg/root
df -h

这里准备了一个脚本,但是有可能在你的机器上不能使用,看你吧。

bash -c "$(curl -fsSL https://sh.digac.icu/shell/auto_extend_root.sh)"

Docker-compose的官方库

首先安装docker

一键安装docker

curl -fsSL https://get.docker.com | bash -s docker

安装docker-compose


sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

安装完成后,你可以通过运行以下命令来验证安装是否成功:

docker-compose --version

然后就可以愉快的使用docker-compose了