一、挂载本地分区
某些时候当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