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




