本文首發於我的個人網站: https://hewanyue.com/
本文作者: Hechao
本文鏈接: https://hewanyue.com/blog/219b1607.html
之前配置了一個web集羣(其實就3個服務器),想實現數據共享和動靜分離,感覺配置分佈式存儲比較複雜,也沒必要,就打算在搭建一個NFS服務器,共享幾個目錄,掛載在幾個web服務器上。
搭建NFS服務過程很順利,手動掛載也沒問題,然後打算將掛載信息寫進/etc/fstab
配置文件,實現開機自動掛載。
#
# /etc/fstab
# Created by anaconda on Wed Oct 9 08:35:16 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=100a90e3-01ac-43aa-b6da-a10a6c105282 /boot ext4 defaults 1 2
/dev/mapper/cl-data /data xfs defaults 0 0
/dev/mapper/swap-swap swap swap defaults 0 0
/dev/sr0 /cdrom iso9660 defaults 0 0
192.168.32.85:/data/nfsshare /apps/nginx/html/wordpress/wp-content/uploads nfs defaults,_netdev 0 0
以爲一切萬事大吉之後,重啓了機子測試下,df
命令一看,發現竟然沒有顯示,用mount -l
命令看了下,也沒有掛載信息——竟然沒有自動掛載。
開始以爲配置文件格式寫錯了,結果嘗試一下mount -a
發現一下就掛載成功了。
這就很奇怪了,說明配置文件格式也沒問題。
NFS服務器也沒任何報錯,應該跟NFS服務器沒有關係,只是出於某種原因不能自動掛載而已。
可是本地光盤確實可以開機正常掛載的,於是我懷疑是參數寫的有問題,不過仔細確認了下,之前參數就是這樣的也是可以成功掛載的,抑或是CentOS8有些新特性和改動。上面確實提示After editing this file, run 'systemctl daemon-reload' to update systemd units generated from this file
,我也嘗試了,沒有效果,不過既然其他掛載項都沒問題,說明問題就在NFS這一行。
於是去查看下系統日誌,發現了問題的端倪
[root@CentOS8 ~]#tail /var/log/boot.log
See 'systemctl status "apps-nginx-html-wordpress-wp\\x2dcontent-uploads.mount"' for details.
[DEPEND] Dependency failed for Remote File Systems.
Starting Permit User Sessions...
Starting The nginx HTTP and reverse proxy server...
Starting Crash recovery kernel arming...
[ OK ] Started OpenSSH server daemon.
[ OK ] Started Permit User Sessions.
Starting Terminate Plymouth Boot Screen...
Starting Hold until boot process finishes up...
[ OK ] Started Command Scheduler.
顯示遠程服務系統也就是NFS服務掛載失敗,查看詳細信息。
[root@CentOS8 ~]#systemctl status "apps-nginx-html-wordpress-wp\\x2dcontent-uploads.mount"
● apps-nginx-html-wordpress-wp\x2dcontent-uploads.mount - /apps/nginx/html/wordpress/wp-content/uploads
Loaded: loaded (/etc/fstab; generated)
Active: failed (Result: resources)
Where: /apps/nginx/html/wordpress/wp-content/uploads
What: 192.168.32.85:/data/nfsshare
Docs: man:fstab(5)
man:systemd-fstab-generator(8)
Nov 11 16:02:39 CentOS8 systemd[1]: apps-nginx-html-wordpress-wp\x2dcontent-uploads.mount: Mount path /apps/nginx/html/wordpress/wp-content/uploads is not canonical (contains a symlink).
Nov 11 16:02:39 CentOS8 systemd[1]: apps-nginx-html-wordpress-wp\x2dcontent-uploads.mount: Failed to run 'mount' task: Too many levels of symbolic links
Nov 11 16:02:39 CentOS8 systemd[1]: apps-nginx-html-wordpress-wp\x2dcontent-uploads.mount: Failed with result 'resources'.
Nov 11 16:02:39 CentOS8 systemd[1]: Failed to mount /apps/nginx/html/wordpress/wp-content/uploads.
說掛載失敗,掛載路徑不符合規範is not canonical (contains a symlink).
。路徑寫法應該沒問題的,難道是因爲Too many levels of symbolic links
,層級太多了嗎?我記得之前掛載點目錄層級結構,比這還長都可以掛載成功的,難道又要歸結爲CentOS8的新特性了麼。
一通百度、google之後,竟然沒有人和我遇到的問題一樣,掛載點的最大層級數是多大也沒人提到過,官方文檔也沒有查到。
正當我打算將層數改小一些再嘗試下的時候,突然看到一篇博客提到Too many levels of symbolic links
,不過是在軟鏈接中的報錯。我突然想起來,當時我安裝完系統後,規劃的是將文檔和應用都裝在/data目錄下,可是我實際操作中比較習慣使用/apps/目錄來找各種應用,於是之前編譯安裝nginx及php之前,我創建了一個軟鏈接ln -s /data/apps /apps
,以便/apps下的數據跟系統分區隔離開,在一個單獨分區。或許這個is not canonical (contains a symlink).
中的symlink說的就是指軟鏈接。
將配置文件修改爲192.168.32.85:/data/nfsshare /data/apps/nginx/html/wordpress/wp-content/uploads nfs defaults,_netdev 0 0
後,再次重啓。df
命令查看
[root@CentOS8 ~]#df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 393080 0 393080 0% /dev
tmpfs 408620 0 408620 0% /dev/shm
tmpfs 408620 5816 402804 2% /run
tmpfs 408620 0 408620 0% /sys/fs/cgroup
/dev/mapper/cl-root 52399108 2700076 49699032 6% /
/dev/sr0 6967726 6967726 0 100% /cdrom
/dev/nvme0n1p1 8191416 163348 7592256 3% /boot
/dev/mapper/cl-data 41926656 585412 41341244 2% /data
192.168.32.85:/data/nfsshare 41926656 535040 41391616 2% /data/apps/nginx/html/wordpress/wp-content/uploads
tmpfs 81724 0 81724 0% /run/user/0
[root@CentOS8 ~]#
掛載成功~問題解決!原來純屬自己挖的坑!
記錄一下,也算,增長點見識,吸取些教訓。