一、掛載本地分區
某些時候當Linux系統下划分了新的分區后,需要將這些分區設置為開機自動掛載,否則,Linux是無法使用新建的分區的。
/etc/fstab 文件負責配置Linux開機時自動掛載的分區。
Windows的文件結構是多個並列的樹狀結構,最頂部的是不同的磁盤(分區),如:C,D,E,F等。
Linux的文件結構是單個的樹狀結構。最頂部的為根目錄,即/。在根目錄下,分為多個子目錄,包括/bin、/boot、/dev、/etc、/home、/lib、/media、/mnt、/opt、/proc、/root、/sbin、/tmp、/usr和/var等。
磁盤Linux分區都必須掛載到目錄樹中的某個具體的目錄上才能進行讀寫操作,而fstab正是負責這一配置。
顯然,根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個磁盤分區。
上面還提到,Linux分區交換也需要獨立使用一個分區,因此,安裝一個Linux至少需要兩個分區。
(事實上,只使用一個分區安裝Linux也是可能的,而且,如果電腦的物理內存足夠大,交換分區並不是必須的)
示例:打開 /etc/fstab 文件
# subo vim /etc/fstab
默認情況下,fstab中已經有了當前的分區配置,內容可能類似:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda1 / ext3 errors=remount-ro 0 1
/swapfile swap swap defaults 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0
由上面的內容可以看出,系統的 /dev/hda1 分區被掛載在根目錄,文件系統是ext3。
此外,還有proc、swap等特殊的“分區”,以及 /dev/hdc 被作為光驅掛載在了 /media/cdrom0
因此,如果希望將新分區 /dev/hda5 掛載在 /home/new 目錄下,則只需在fstab文件中加入一行:
/dev/hda5 /home/new ext3 default 0 1
即可。
第一列 <file system>:可以是實際分區名,也可以是實際分區的卷標(Lable)。
如果磁盤是SATA接口,且有多個磁盤,則每個磁盤被標記為 /dev/hda 、 /dev/hdb、 /dev/hdc 等以此類推;而每個磁盤的分區被標記為 /dev/hda1、 /dev/hda2等。
如果磁盤是SCSI類型,則多個磁盤會被分別標記為 /dev/sda、/dev/sdb等等。分區同理。
如果使用標簽來表示,則格式如:lable=/
第二列 <mount point> :是掛載點。
掛載點必須為當前已經存在的目錄,為了兼容起見,最好在創建需要掛載的目標目錄后,將其權限設置為777,以開放所有權限。
第三列<type> :為此分區的文件系統類型。
Linux可以使用ext2、ext3等類型,此字段須與分區格式化時使用的類型相同。
也可以使用 auto 這一特殊的語法,使系統自動偵測目標分區的分區類型。auto通常用於可移動設備的掛載。
第四列 <options>:是掛載的選項,用於設置掛載的參數。
常見參數如下:
defaults: rw, suid, dev, exec, auto, nouser, and async.
auto: 系統自動掛載,fstab默認就是這個選項
noauto 開機不自動掛載
nouser 只有超級用戶可以掛載
ro 按只讀權限掛載
rw 按可讀可寫權限掛載
user 任何用戶都可以掛載
請注意光驅和軟驅只有在裝有介質時才可以進行掛載,因此它是noauto
第五列<dump>:是備份設置。
當其值設置為1時,將允許dump備份程序備份;設置為0時,忽略備份操作;
第六列<pass>:是fsck磁盤檢查設置。
其值是一個順序。當其值為0時,永遠不檢查;而 / 根目錄分區永遠都為1。其它分區從2開始,數字越小越先檢查,如果兩個分區的數字相同,則同時檢查。
當修改完此文件並保存后,重啟服務器生效。
二、掛載遠程目錄:
linux掛載遠程目錄,有兩種方式:ssh和nfs;有兩種共享協議:samba和cifs
1.ssh方式
當我們需要管理一台遠程的linux服務器的時候經常使用的是比較安全的ssh。
示例一:
以下是通過ssh掛在遠程目錄的方法:
~$ sudo apt-get install sshfs fuse ~$ sshfs <username>@<ipaddress>:/remotepath ~/remoteserv -o allow_other
若提示一下錯誤:
fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
則在/etc/fuse.conf中添加user_allow_other
如需自動掛載,可以在/etc/fstab中添加如下代碼:
sshfs#username@ipaddress:/remotepath ~/remoteserv fuse user,_netdev,exec,reconnect,uid=1000,gid=1000,idmap=user,allow_other 0 0
如果掛載沒有效果,可以查看日志了,sshd的日志在:/var/log/auth.log:
Aug 8 11:05:21 localhost sshd[21595]: Authentication refused: bad ownership or modes for directory /remotepath
此時一般是remotepath目錄的權限錯誤,一般該目錄的權限應為700或755,不能為77x。
示例二:unubtu客戶端
遠程共享: \\192.168.1.18\projects\android_releases
現在想將這個release的內容通過rsync同步到本地,那樣就不用每次去代碼都遠涉重洋進行copy了。
第一步就是要將這個遠程共享mount到本地,然后再在本地的文件夾之間進行同步。
如何mount呢?
mount的方式有兩種,smbfs和cifs,但是由於smbfs同Samba工具(如smb.conf,smbmount等)的耦合性很高,所以逐漸就被cifs替代了,但是出於兼容性的原因,現在在某些系統上還能通過smbfs選項進行掛載。
建議采用cifs方式掛載遠程共享文件夾。
Ubuntu 14.04默認不支持mount.cifs文件系統,需要安裝cifs-utils組件:
$ sudo apt-get install cifs-utils
$ sudo mount -t cifs //dfs.guyongqiangx.com/projects/android_releases /mnt
以只讀方式掛載遠程共享目錄到本地:
$ sudo mount -t cifs //dfs.guyongqiangx.com/projects/android_releases android --verbose -o username=youraccount,password=xxx,ro
以下是掛載成功后的df -h輸出信息:
$ df -h
示例三:centos客戶端
如果是centos,如果沒有cifs-utils組件,也需要安裝
yum install cifs-utils #安裝cifs協議包
#列出遠程目錄
smbclient -L 192.100.9.165 -Uadministrator
掛載:
vim /etc/fstab //192.100.9.165/youraccount/storage/sharefolder cifs defaults,username=administrator,password=16001007,uid=500,gid=500
#安裝192.100.9.165 zhihuiwuxi目錄到本地/storage/samba 指定uid,gid(否則只有root對目錄有讀寫權限)
mount -a
2.nfs方式
示例一:centos服務器
服務器端: 172.21.10.68
~$ sudo apt-get install nfs-kernel-server portmap //安裝nfs portmap ~$ sudo vi /etc/exports //配置nfs
# /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # #Add Next Line //feison /home/useraccount/sharefolder *(rw,sync,no_root_squash,no_subtree_check)
保存退出: :wq
~$ sudo service nfs restart //啟動nfs服務 ~$ sudo service portmap start //啟動portmap服務
客戶端:
~$ sudo apt-get install nfs-kernel-server ~$ sudo mount -t nfs 172.21.10.68:/home/youraccount/sharefolder ./yourLocalFolder ~$ sudo umount ./nfs
如果出現:mount: mount to NFS server 'p470-1' failed: RPC Error: Program not registered
是服務端的服務沒有啟動,重新啟動服務即可。
示例二:unubtu服務器
安裝服務: sudo apt-get install portmap ##nfs服務需要的RPC支持 sudo apt-get install nfs-kernel-server ##nfs服務端
修改nfs共享配置文件: sudo vim /etc/exports 添加如下共享路徑內容: /mnt/disk1 *(insecure,rw,sync,no_root_squash) /mnt/disk1: 需要設置共享的目錄,設置為共享之后,其它機器才可以進行遠程mount *: 允許訪問的ip地址,*為所有ip均可訪問 其它參數:默認就行,具體的可以網上查看
重啟服務:
sudo service rpcbind restart ##portmap服務 sudo service nfs restart #nfs服務,或者命令sudo /etc/init.d/nfs-kernel-server restart
重啟成功則nfs配置成功。
安裝nfs客戶端:
sudo apt-get install nfs-common ##nfs client
測試mount命令: sudo mount -t nfs xxx.xxx.xxx.xxx:/mnt/disk1 /mnt/disk1
xxx.xxx.xxx.xxx:服務器的ip
/mnt/disk1:服務器的共享目錄
/mnt/disk1:客戶機的本地訪問目錄,需要提前創建好
客戶端,配置fstab文件:
sudo vim /etc/fstab # 添加如下mount內容 xxx.xxx.xxx.xxx:/mnt/disk1 /mnt/disk1 auto rw,user,auto,exec,utf8 0 0 # 其它參數具體查看網上fstab文件參數說明
三、故障排除
如果掛載時,/etc/fstab中的參數寫錯,有可能出現不能啟動客戶端的情況。如以下提示:
cannot open access to console, the root account is locked
# /dev/sda11 LABEL=Basic\040data\040partition UUID=2c74def9-3622-4f4f-933a-669f9bcda846 /home ext4 rw,relatime,data=ordered 0 2
修改成:
# /dev/sda11 LABEL=Basic\040data\040partition UUID=2c74def9-3622-4f4f-933a-669f9bcda846 /home ext4 rw,relatime,data=ordered,x-systemd.device-timeout=60 0 2
