wsl 修改clickhouse数据存储路径修改到其他磁盘

Posted on 2026-06-01 13:48  打杂滴  阅读(10)  评论(0)    收藏  举报

在 WSL (Windows Subsystem for Linux) 环境中,ClickHouse 默认将数据存储在系统盘(通常是 /var/lib/clickhouse)。如果系统盘空间不足,或者你希望将数据存储到挂载的其他大容量磁盘(如 Windows 的 D 盘或额外挂载的虚拟磁盘),可以通过以下主要方法修改存储路径。

‌重要提示:‌

‌性能警告‌:尽量避免直接将 ClickHouse 数据存放在通过 /mnt/c 或 /mnt/d 访问的 Windows 文件系统上,因为 WSL2 跨文件系统访问的性能远低于原生 Linux 文件系统(ext4)。最佳实践是将数据存放在 WSL2 内部挂载的原生 Linux 磁盘分区中。
‌备份数据‌:在进行任何迁移操作前,建议先备份重要数据。

方法一:修改配置文件(推荐,标准做法)
这种方法通过修改 ClickHouse 的主配置文件 config.xml 来指定新的数据目录。

1. 停止 ClickHouse 服务
在迁移数据前,必须停止服务以防止数据损坏。

sudo service clickhouse-server stop
# 或者
sudo systemctl stop clickhouse-server
2. 创建新的数据目录
假设你要将数据移动到 /data/clickhouse(请确保该路径所在的磁盘有足够空间且已挂载到 WSL)。

sudo mkdir -p /data/clickhouse
3. 迁移原有数据
将默认目录下的所有文件复制到新目录,并保留文件属性和权限。

sudo cp -a /var/lib/clickhouse/* /data/clickhouse/
4. 修改权限
确保 clickhouse 用户对新目录拥有完全控制权。

sudo chown -R clickhouse:clickhouse /data/clickhouse
5. 修改配置文件
编辑 ClickHouse 的主配置文件 /etc/clickhouse-server/config.xml。

sudo nano /etc/clickhouse-server/config.xml
找到 <path> 标签,将其值修改为新路径:

xml
<!-- 修改前 -->
<path>/var/lib/clickhouse/</path>

<!-- 修改后 -->
<path>/data/clickhouse/</path>
注意:如果配置文件中还显式定义了 <tmp_path>、<user_files_path>或<backups_path>`,也建议将它们修改到新磁盘对应的子目录下,以避免混合存储。

6. 启动服务并验证
sudo service clickhouse-server start
登录 ClickHouse 客户端,创建一个测试表并插入数据,检查新数据是否生成在 /data/clickhouse 目录下。

clickhouse-client
CREATE TABLE test_move (id UInt32) ENGINE = MergeTree() ORDER BY id;
INSERT INTO test_move VALUES (1);
EXIT;
ls -l /data/clickhouse/data/default/test_move

 

方法二:使用软链接(无需修改配置)
如果你不想修改配置文件,或者希望保持默认配置路径不变但实际存储在其他位置,可以使用软链接(Symbolic Link)。

1. 停止 ClickHouse 服务
sudo service clickhouse-server stop
2. 移动数据目录
将默认的 /var/lib/clickhouse 目录移动到新的目标位置(例如 /data/clickhouse_data)。

sudo mv /var/lib/clickhouse /data/clickhouse_data
3. 创建软链接
在原来的位置创建一个指向新位置的软链接。

sudo ln -s /data/clickhouse_data /var/lib/clickhouse
4. 修正权限
确保软链接指向的目标目录权限正确。

sudo chown -R clickhouse:clickhouse /data/clickhouse_data
5. 启动服务
sudo service clickhouse-server start

 

方法3 将wsl 迁移到 其他盘

方案一:将整个 WSL 发行版迁移到 D 盘(最佳实践)
此方法将 WSL 的虚拟硬盘文件从 C 盘移动到 D 盘,ClickHouse 的数据自然也就存储在 D 盘了,且保持 Linux 原生文件系统的高性能。

1. 停止 WSL
打开 PowerShell(管理员模式),执行:

wsl --shutdown
2. 导出当前发行版
假设你的 WSL 发行版名称为 Ubuntu(可通过 wsl -l -v 查看),将其导出为 tar 包保存到 D 盘临时位置:

# 创建备份目录
mkdir D:\WSL_Backup

# 导出发行版 (过程可能较慢,取决于数据大小)
wsl --export Ubuntu D:\WSL_Backup\ubuntu.tar
3. 注销原发行版
‌注意:‌ 此操作会删除 C 盘上的原始数据,请确保上一步导出成功且文件完整。

wsl --unregister Ubuntu
4. 导入到 D 盘新位置
在 D 盘创建一个新的文件夹用于存放 WSL 数据,然后导入:

# 创建新存储目录
mkdir D:\WSL\Ubuntu

# 导入发行版,指定新位置
wsl --import Ubuntu D:\WSL\Ubuntu D:\WSL_Backup\ubuntu.tar --version 2
5. 恢复默认用户
导入后,默认登录用户会变成 root。你需要改回原来的普通用户(假设用户名为 yourusername):

# 方法:在 PowerShell 中执行
Ubuntu config --default-user yourusername
如果不确定用户名,可以先以 root 身份进入 WSL,查看 /home 目录下的文件夹名,或者查看 /etc/passwd 文件。

6. 验证
启动 WSL,运行 df -h,确认根目录 / 的空间对应的是 D 盘的剩余空间。此时 ClickHouse 默认路径 /var/lib/clickhouse 实际上已经位于 D 盘的 ext4.vhdx 文件中。

 

image

 

image

 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3