首页 > 代码库 > Linux下通过修改fstab来自动挂载Windows 分区

Linux下通过修改fstab来自动挂载Windows 分区

我电脑装的是Windows和Linux双系统,以前在Linux下,要打开Windows系统的C盘或D盘的时候,总是要输入密码,很麻烦,而且麻烦了很长时间.


后来有一天浩哥看到了,说可以在Linux开机时自动挂载Windows分区的,修改/etc/fstab这个文件,可以采用每个分区的UUID.后来校长也看到了我每次麻烦的操作,说是确实可以搞,而且他已经搞定了.我想我也得搞搞了.


首先就是man mount ,mount里面提到,UUID和LABEL的方式更健壮,更具鲁棒性.浩哥说的果然是对的.


mount里面也提到可以参照fstab的manual文档,所以在man fstab后发现,fstab文件是一个多文件系统的信息描述文件,应用程序不能修改它,而它的维护和修改任务则需要系统管理员来完成.每个文件系统在fstab中表示为一行,一行有多个域(field),每个域用空格或tab键隔开.下面我们就看一下各个域及其含义.


六个域名称如下:


<file system>     <mount point>     <type>     <options>     <dump>     <pass>
<pre> 这是两个文件系统的例子:
 UUID=22b1037f-6c5e-46d0-b965-44cc42313795  /     ext4 errors=remount-ro 0 1
 UUID=7c4b5af9-599b-4052-aeb1-5dbd78f4d8e8  /home ext4 defaults          0 2
</pre>
1.file system:表示将要挂在的快设备的名称.注意这个设备也可以是远程设备,比如说是远程服务器上的某个设备,后面我会举一个例子.对于本地设备,该域格式可以是/dev/cdrom,LABEL=&lt;label&gt;,或者UUID=&lt;uuid&gt;;对于远程文件系统,格式为&lt;host&gt;:&lt;dir&gt;,如 freeshell.ustc.edu.cn:/.远端设备格式好写,对于本地设备,如何获取UUID 号和LABEL呢?要挂载的/dev/sdb1还是/dev/sda5呢?这个可以用blkid命令查看:
<pre>sudo blkid
/dev/sda1: LABEL="M-gM-3M-;M-gM-;M-^_M-dM-?M-^]M-gM-^UM-^Y" UUID="9ED61632D6160B63" TYPE="ntfs" PARTUUID="5be4a3f9-01" 
/dev/sda2: UUID="908265F98265E466" TYPE="ntfs" PARTUUID="5be4a3f9-02" 
/dev/sda3: UUID="98B6FE61B6FE3EF6" TYPE="ntfs" PARTUUID="5be4a3f9-03" 
/dev/sda5: UUID="7c4b5af9-599b-4052-aeb1-5dbd78f4d8e8" TYPE="ext4" PARTUUID="5be4a3f9-05" 
/dev/sda6: UUID="22b1037f-6c5e-46d0-b965-44cc42313795" TYPE="ext4" PARTUUID="5be4a3f9-06" 
</pre>
我们知道,Windows系统的分区格式是ntfs(new technology file system),从上面的输出中我们可以知道,要挂载的Windows分区是/dev/sda2和/dev/sda3.因为这两个分区没有LABEL,所有就没法采用LABEL=&lt;label&gt;的方式来表示第一个域了.所以我们要挂载的两块Windows分区的第一个域可以这样写:
<pre>#C盘
/dev/sda2
#D盘
/dev/sda3
</pre>
或者:
<pre>#C盘 
UUID=908265F98265E466 
#D盘 
UUID=98B6FE61B6FE3EF6
</pre>
第一个域就写好了,下面看第二个域.
2.mount point: 即挂载点,使用过mount命令的同学应该明白这个域是干什么的,简单来说就是将物理的存储盘在Linux系统中找一个点放置下来,相当于在Linux文件树上找一个点,将物理存储对应到这个点上.挂载在这个点后,所有对该点的操作都会写入到对应的物理存储中.在最顶上的挂载例子中,我们看到UUID=22b1037f-6c5e-46d0-b965-44cc42313795(从blkid命令结果可以看出,该分区是/dev/sda6)的物理存储挂载到了/目录(Linux系统根目录),也就是说/目录下面的所有东西都写入到该分区中(/home目录除外),同理,所有/home目录下的内容都写入到UUID=7c4b5af9-599b-4052-aeb1-5dbd78f4d8e8(从blkid命令结果可以看出,该分区是/dev/sda5)的分区中.


那么,我们要把C盘和D盘挂载到哪里呢?我是这样做的:
a.先查看没有自动挂载Windows分区之前,手动挂载时,系统会把C盘和D盘挂载到哪,结果如下:/media/wang(wang是我的用户名),C盘被命名为908265F98265E466,D盘被命名为98B6FE61B6FE3EF6,即其相应的UUID.
b.所以我想,可能是挂载到/media目录下的任意一个子目录下吧,
所以我将该域分别设置为/media/c和/media/d,综合前两个域,应该写成:
<pre>#C盘
/dev/sda2 /media/c
#D盘
/dev/sda3 /media/d
</pre>
或者:
<pre>#C盘 
UUID=908265F98265E466 /media/c
#D盘 
UUID=98B6FE61B6FE3EF6 /media/d
</pre>
下面看第三个域type:


3.type 即文件系统的格式,像Linux下常用的 ext,ext1,ext2,ext3,Windows下常用的fat16,fat32,ntfs等.可以根据blkid命令的结果来写该域.根据blkid的结果, 我们要挂载的C盘和D盘的文件系统格式为ntfs,所以前三个域都确定了,有如下写法:
<pre>#C盘
/dev/sda2 /media/c ntfs
#D盘
/dev/sda3 /media/d ntfs
</pre>
或者:
<pre>#C盘 
UUID=908265F98265E466 /media/c ntfs
#D盘 
UUID=98B6FE61B6FE3EF6 /media/d ntfs
</pre>
4.第四个域是option:选项,该域表示挂载的时候的一些选项,主要有6个选项,每个选项用逗号隔开,下面详细说明每个选项的含义:
<pre>default:使用默认选项
noauto:当执行mount -a(即挂载全部文件系统,开机时会执行此命令)时忽略此条记录,也就是跟没写进fstab一样
user:允许特定的用户来挂载,如user=bob,则只能允许bob这个用户来挂载
owner:允许物理设备的拥有者来挂载
comment:为fstab维护程序提供一些说明
nofail:在挂载失败后,忽略此错误,继续往下执行
</pre>
因为我们没有特殊要求,所以就选default,但nofail这个选项后面我会用到,暂且不表.所以前四个域可以写成这样子:
<pre>#C盘
/dev/sda2 /media/c ntfs default
#D盘
/dev/sda3 /media/d ntfs default
</pre>
或者:
<pre>#C盘 
UUID=908265F98265E466 /media/c ntfs default
#D盘 
UUID=98B6FE61B6FE3EF6 /media/d ntfs default
</pre>
5.第5个域是dump,dump这个命令执行备份操作,该域为0,表示执行dump操作时忽略该分区,如果为1,则表示执行dump时也会备份该分区.因为我们没有备份的需求,所以该域设置为0,所以前五个域为:
<pre>#C盘
/dev/sda2 /media/c ntfs default 0
#D盘
/dev/sda3 /media/d ntfs default 0
</pre>
或者:
<pre>#C盘 
UUID=908265F98265E466 /media/c ntfs default 0
#D盘 
UUID=98B6FE61B6FE3EF6 /media/d ntfs default 0
</pre>
6.最后一个域是pass,不是passwd的pass,而是系统重启时检查分区正常与否时,该分区的检查顺序.根目录所在文件系统的passno是1,其他文件分区为2.如果设置为0,则表示不检查.我们的C盘和D盘不想让Linux检查,所以设置为0.
所以综合以上步骤,我们可以写出下面的完整的两条记录:
<pre>#C盘
/dev/sda2 /media/c ntfs default 0 0
#D盘
/dev/sda3 /media/d ntfs default 0 0
</pre>
或者:
<pre>#C盘 
UUID=908265F98265E466 /media/c ntfs default 0 0
#D盘 
UUID=98B6FE61B6FE3EF6 /media/d ntfs default 0 0
</pre>
按理来说这两种形式都可以的,将任一种形式的两条记录添加到fstab文件中,重新启动系统,下次打开Windows系统的分区时,应该就不需要输入密码了.

Linux下通过修改fstab来自动挂载Windows 分区