[Linux]解决FTP服务器不支持软连接目录

2020-03-10 16:42:03 浏览数 (1)

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:https://cloud.tencent.com/developer/article/1596458


文章目录

代码语言:txt复制
- @[toc]1.原因情况说明将硬盘挂在到FTP服务器共享目录中3.1. 新建目录3.2.  挂载目录说明3.3. 取消挂载取消挂载可能出现的问题

1.原因

我有一个移动硬盘,里面存放了许多电影,有时候插在做FTP服务器Linux电脑上,想直接用iPad去访问移动硬盘,所以必须要把移动硬盘挂在FTP服务器上(不挂在Samba服务器的原因是,我的FTP服务器 只读不可写,而Samba服务器 可读可写),所以就有了这个需求。

但是FTP服务器不支持软连接,所以只能另寻他法了。

2. 情况说明

我的FTP服务器的共享目录是 /srv/qfxFtp/

我的 移动硬盘 的挂在点目录是 /media/qfx/Qfx_01/,具体情况如下所示:

代码语言:javascript复制
root@qfx-HP-xw4600-Workstation:/srv/qfxFtp# df -h
文件系统        容量  已用  可用 已用% 挂载点
udev            3.9G     0  3.9G    0% /dev
... ...
/dev/sdc1       932G  847G   86G   91% /media/qfx/Qfx_01

root@qfx-HP-xw4600-Workstation:/srv/qfxFtp# ls -lF /media/qfx/Qfx_01/
总用量 32
drwxrwxrwx 1 qfx qfx  4096 10月 18 17:39 电视剧/
drwxrwxrwx 1 qfx qfx 28672 11月  2 22:50 电影/

3. 将硬盘挂在到FTP服务器共享目录中

3.1. 新建目录

FTP服务器共享目录中新建一个目录用于挂载移动硬盘的目录,这里这个目录我就直接起名为Q_rmDisk

代码语言:javascript复制
root@qfx-HP-xw4600-Workstation:/srv/qfxFtp# mkdir Q_rmDisk
root@qfx-HP-xw4600-Workstation:/srv/qfxFtp# ls -lF
总用量 3360
...
drwxrwxrwx 2 root root    4096 2月  23 22:58 Q_rmDisk/
...

3.2. 挂载目录

代码语言:javascript复制
mount --bind 源目录 目标目录
代码语言:javascript复制
root@qfx-HP-xw4600-Workstation:/srv/qfxFtp# mount --bind /media/qfx/Qfx_01/ /srv/qfxFtp/Q_rmDisk/

root@qfx-HP-xw4600-Workstation:/srv/qfxFtp# cd Q_rmDisk/
root@qfx-HP-xw4600-Workstation:/srv/qfxFtp/Q_rmDisk# ls -lFa
总用量 40
drwxrwxrwx 1 qfx    qfx     4096 11月  2 22:42 ./
drwxr-xr-x 6 qfxFtp qfxFtp  4096 2月  23 23:29 ../
drwxrwxrwx 1 qfx    qfx     4096 10月 18 17:39 电视剧/
drwxrwxrwx 1 qfx    qfx    28672 11月  2 22:50 电影/

说明

vsftpd本身不支持软连接,而在用FTP共享的时候又不想移动文件位置,这是一个变通方案。

Linux内核从2.4.0开始支持把一部分文件系统挂载到文件系统中的其他位置,mount命令的--bind选项正好提供了这个功能。

可以把需要共享的文件夹media/qfx/Qfx_01/挂载到FTP目录中的一个子目录/srv/qfxFtp/Q_rmDisk/。这个目录对于vsftpd而言是一个正常文件系统的目录,于是就可以被共享了。当不需要共享目录时,直接umount即可。

mount --bind命令本身支持单个文件的挂载,可以把目标文件挂载到另外一个文件上,起到类似于软链接的功能。同目录的挂载类似,这也是vsftpd支持的。

3.3. 取消挂载

强行解除挂载

代码语言:javascript复制
umount  /srv/qfxFtp/Q_rmDisk/

取消挂载可能出现的问题

取消挂载/srv/qfxFtp/Q_rmDisk/时出现 umount: /srv/qfxFtp/Q_rmDisk/: device is busy

原因是因为有程序在使用 /srv/qfxFtp/Q_rmDisk/ 目录,我们可以使用 fuser 命令查看挂载目录被哪些进程占用:

代码语言:javascript复制
fuser -kvm  /srv/qfxFtp/Q_rmDisk/

然后 kill 就可以了。

代码语言:javascript复制
命令:kill -9 pid

如果还是不行,还可以强行解除挂载

代码语言:javascript复制
# 强行解除挂载
umount -l /srv/qfxFtp/Q_rmDisk/ 

OK!

以上,Enjoy~

0 人点赞