You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04 Server新增分区挂载权限与系统级使用配置咨询

Ubuntu 22.04 Server新增分区挂载权限与系统级使用配置咨询

嗨,看起来你碰到的是用户级挂载和系统级挂载的权限差异问题——你现在用Disks工具或者手动创建后自动挂载到/media/username/volumename的方式,属于用户会话级的挂载,系统会自动把这个分区的权限锁定给创建挂载的用户,所以其他用户(包括mysql、www-data这类系统服务用户)自然访问不了。

要让这个分区变成像Windows里D盘那样的系统级存储,供所有服务和用户正常使用,你需要调整挂载方式,具体步骤如下:

1. 先卸载当前的用户级挂载

如果分区现在还挂着,先把它卸下来:

sudo umount /media/你的用户名/分区名

如果提示忙,可以先退出那个目录,或者用sudo fuser -km /media/你的用户名/分区名强制卸载(谨慎使用,确保没有程序在读写)。

2. 创建系统级挂载点

选一个系统级的路径作为挂载点,比如/mnt/storage(通用存储),或者根据你的用途直接建对应目录,比如/var/www/website_data(网站根目录)、/var/lib/mysql/db_storage(MySQL数据):

sudo mkdir /mnt/storage

3. 获取分区的UUID(更稳定的挂载标识)

blkid命令找到你那个ext4分区的UUID,设备名可能是/dev/sda3或者/dev/nvme0n1p3这类:

sudo blkid

输出里找TYPE="ext4"的行,复制它的UUID值(比如UUID="1234abcd-1234-5678-90ab-cdef01234567")。

4. 修改fstab实现开机自动挂载且权限可控

编辑/etc/fstab文件(这是系统挂载配置文件,一定要小心操作,先备份):

sudo cp /etc/fstab /etc/fstab.bak  # 先备份,防止改错开不了机
sudo nano /etc/fstab

在文件末尾添加一行,把刚才的UUID和挂载点填进去:

UUID=你复制的UUID /mnt/storage ext4 defaults,umask=0022 0 2

参数解释:

  • defaults:包含读写、自动挂载等基础属性
  • umask=0022:设置默认文件权限为644(所有用户可读,属主可写),目录权限为755(所有用户可访问,属主可读写执行),这样普通用户和系统服务都能正常访问
  • 最后两个数字0 2:第一个是dump备份开关(0表示不备份),第二个是fsck检查顺序(2表示非根分区,根分区是1)

如果需要让特定服务用户(比如网站的www-data、MySQL的mysql)有读写权限,也可以在参数里加uid=www-data,gid=www-data,不过更灵活的方式是挂载后单独调整目录权限。

5. 测试挂载并验证权限

执行命令让系统读取新的fstab配置并挂载:

sudo mount -a

如果没有报错,就成功了!你可以用df -h查看挂载状态,然后检查权限:

ls -ld /mnt/storage

应该会显示类似drwxr-xr-x 2 root root 4096 日期 /mnt/storage,这样所有用户都能访问。

6. 针对你的用途(网站+MySQL)的额外配置

网站根目录:

如果要把网站文件放到这个分区,比如创建/mnt/storage/www目录:

sudo mkdir /mnt/storage/www
sudo chown -R www-data:www-data /mnt/storage/www

然后修改Nginx/Apache的配置文件,把网站根目录指向/mnt/storage/www即可。

MySQL数据库:

移动MySQL数据目录前一定要备份数据,然后按以下步骤操作:

# 停止MySQL服务
sudo systemctl stop mysql

# 复制原数据到新分区(-a保留权限)
sudo cp -a /var/lib/mysql/* /mnt/storage/mysql

# 修改MySQL配置文件里的数据目录路径
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 找到datadir一行,改成datadir = /mnt/storage/mysql

# 给新目录设置正确的权限
sudo chown -R mysql:mysql /mnt/storage/mysql

# 启动MySQL服务并检查状态
sudo systemctl start mysql
sudo systemctl status mysql

为什么之前的方式不行?

/media目录是udisks服务专门用来处理用户手动挂载的分区的,它会自动把挂载目录的权限设为当前用户(比如你的admin用户),这样其他用户和系统服务进程就没有访问权限了。而通过/etc/fstab挂载到/mnt或其他系统目录,属于系统级挂载,权限完全由你控制,才能满足服务的需求。

备注:内容来源于stack exchange,提问作者Rich701

火山引擎 最新活动