通过UUID方式在fstab中挂载分区

通过UUID在fstab中挂载分区

 
通常情况,Linux的/etc/fstab文件可能有如下内容:
 # /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#              
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=8f21495f-bd94-4a88-b433-e52b71475941     /               ext4   errors=remount-ro 0       1
# swap was on /dev/sda2 during installation
UUID=c16a9b20-d020-4741-a1b8-702ba18e82de     none            swap   sw                0       0

     目前不少Linux系统(红帽系列的Fedora,Cent OS,或Debian系列的Ubuntu,LinuxMint,等等)都采用UUID方式挂载分区。

     UUID 全称是 Universally Unique Identifier,也就是说,每个分区有一个唯一的 UUID 值,这样就不会发生分区识别混乱的问题了。

    从上面的fstab文件片段可以看出,一般分区的挂载:
 UUID=8f21495f-bd94-4a88-b433-e52b71475941      /               ext4   errors=remount-ro 0       1

    并且可以从片段中也可以看出来,挂载分区的格式:
#              
    至于具体每个参数的详细介绍,在这里就不做过多解释,详情可百度,谷歌,或者参见:

/etc/fstab文件详解

      需要注意一点,如果挂载的是非“/”根分区,dump及pass选项最好都应该是0,即不备份,不检查。


    现在让我们回到UUID这个主题上来,当我们在安装多系统后,一般情况下,安装的新系统,默认只会挂载根分区“/”及swap分区,可能还有“/home”分区。那么我们想要挂载其他已经存在的分区的时候,如何知道现有分区的UUID呢,以便我们通过修改/etc/fstab文件来达到启动系统后,自动挂载分区的目的。

    经过网上查阅,一般我们可以通过两种方式获知每个已经存在分区UUID:

1. 通过查看/dev/disk/by-uuid/ 下的设备文件信息:
$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Jul  8 09:15 497fd510-08cf-45ff-8c7f-c84b69df97fb -> ../../sda7
lrwxrwxrwx 1 root root 10 Jul  8 09:15 4c4dffba-5bd8-4d09-b1a9-1cb1737d1b95 -> ../../sda9
lrwxrwxrwx 1 root root 10 Jul  8 09:15 8f21495f-bd94-4a88-b433-e52b71475941 -> ../../sda8
lrwxrwxrwx 1 root root 10 Jul  8 09:15 983df574-f924-4dc3-9973-2ec1ac1c12b8 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jul  8 09:15 a3c9082b-48f1-4149-9b09-599f3216197f -> ../../sda5
lrwxrwxrwx 1 root root 10 Jul  8 09:15 c16a9b20-d020-4741-a1b8-702ba18e82de -> ../../sda3
.....
     可以看出每个分区的UUID映射关系了。但是有个缺点,也许大家已经发现了,没有分区类型,当然,如果你自己明确知道分区类型,那就没有问题了,如果不知道,最好还是用下面将要介绍的blkid命令。

2. blkid命令,在fstab里也提到的“官方”命令。
$ sudo blkid
[sudo] password for kemix:
/dev/sda1: UUID="DBC4-2A73" TYPE="vfat"
/dev/sda2: UUID="983df574-f924-4dc3-9973-2ec1ac1c12b8" TYPE="ext4"
/dev/sda3: UUID="c16a9b20-d020-4741-a1b8-702ba18e82de" TYPE="swap"
/dev/sda4: UUID="fef3cea8-1ec8-4628-b588-eee6c88e1727" TYPE="ext4"
/dev/sda5: UUID="a3c9082b-48f1-4149-9b09-599f3216197f" TYPE="ext4"
/dev/sda6: UUID="e7e7f563-e99a-4413-8298-6c9012623ead" TYPE="ext4"
.....


    有了UUID后,我们就可以编辑fstab文件来挂载分区,编辑保存后,重启,如果在启动的时候,没有出现挂载失败信息,那么恭喜你!
附加:

 1 fstab文件的作用 

文件/etc/fstab存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过mount /directoryname命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或tab键分开。同时fsckmountumount的等命令都利用该程序。
 

2. fstab
文件格式
 

下面是/etc/fatab文件的一个示例行:
 

fs_spec        fs_file       fs_type       fs_options       fs_dump        fs_pass 

/dev/hda1       /               ext2            defaults             1    1 

fs_spec - 
该字段定义希望加载的文件系统所在的设备或远程文件系统,对于一般的本地块设备情况来说:IDE设备一般描述为/dev/hdXNXIDE设备通道(a, b, or c)N代表分区号;SCSI设备一描述为/dev/sdaXN。对于NFS情况,格式一般为


,
例如:`knuth.aeb.nl:/。对于procfs,使用`proc来定义。
 

fs_file - 
该字段描述希望的文件系统加载的目录点,对于swap设备,该字段为none;对于加载目录名包含空格的情况,用40来表示空格。
 

fs_type - 
定义了该设备上的文件系统,一般常见的文件类型为ext2 (Linux设备的常用文件类型)vfat(Windows系统的fat32格式)NTFSiso9600等。
 

codepage
国家语言代码页
 

iocharset
字符集
 

fs_options - 
指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。对于大多数系统使用defaults就可以满足需要。其他常见的选项包括:
 

选项 含义
 

ro 
以只读模式加载该文件系统
 

sync 
不对该设备的写操作进行缓冲处理,这可以防止在非正常关机时情况下破坏文件系统,但是却降低了计算机速度
 

user 
允许普通用户加载该文件系统
 

quota 
强制在该文件系统上进行磁盘定额限制
 

noauto 
不再使用mount a命令(例如系统启动时)加载该文件系统
 

fs_dump - 
该选项被dump命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为


fs_pass - 
该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为


 
 

3. 
示例文件
 

# /etc/fstab 

/dev/hda8 swap swap defaults 0 0 

/dev/hda9 / ext2 defaults 1 1 

/dev/hda6 /wine vfat defaults,codepage=936,iocharset=cp936 0 0 

/dev/hda7 /winf vfat defaults,codepage=936,iocharset=cp936 0 0 

/dev/hdb /cdrom iso9660 noauto,user 0 0 

none /proc proc defaults 0 0 

none /dev/pts devpts gid=5,mode=620 0 0

fstab中存放了与分区有关的重要信息,其中每一行为一个分区记录,每一行又可分为六个部份,下面以/dev/hda7 / ext2 defaults 1 1为例逐个说明:

1. 第一项是您想要mount的储存装置的实体位置,如hdb或/dev/hda6。 

2. 第二项就是您想要将其加入至哪个目录位置,如/home或/,这其实就是在安装时提示的挂入点。 

3. 第三项就是所谓的local filesystem,其包含了以下格式:如ext、ext2、msdos、iso9660、nfs、swap等,或如ext2,可以参见/prco/filesystems说明。 

4. 第四项就是您mount时,所要设定的状态,如ro(只读)或defaults(包括了其它参数如rw、suid、exec、auto、nouser、async),可以参见「mount nfs」。 

5. 第五项是提供DUMP功能,在系统DUMP时是否需要BACKUP的标志位,其内定值是0。

6. 第六项是设定此filesystem是否要在开机时做check的动作,除了root的filesystem其必要的check为1之外,其它皆可视需要设定,内定值是0。
/etc/fstab内容主要包括六项:

例如:打印出中间的两行内容,如下
LABEL=/    /    ext3   defaults     1     1
/dev/sda2   /mnt/D/     vfat    defaults    0   0

第一列:设备名或者设备卷标名,(/dev/sda10 或者 LABEL=/

第二列:设备挂载目录        (例如上面的“/”或者“/mnt/D/”

第三列:设备文件系统          (例如上面的“ext3”或者“vfat”

第四列:挂载参数     (看帮助man mount
对于已经挂载好的设备,例如上面的/dev/sda2,现在要改变挂载参数,这时可以不用卸载该设备,而可以使用下面的命令(没有挂载的设备,remount 这个参数无效)
#mount /mnt/D/ -o remount,ro  (改defaultsro
为了安全起见,可以指明其他挂载参数,例如:
noexec (不允许可执行文件可执行,但千万不要把根分区挂为noexec,那就无法使用系统了,连mount 命令都无法使用了,这时只有重新做系统了!
nodev (不允许挂载设备文件)
nosuid,nosgid (不允许有suidsgid属性)
nouser (不允许普通用户挂载)

第五列:指明是否要备份,(0为不备份,1为要备份,一般根分区要备份)

第六列:指明自检顺序。 0为不自检,1或者2为要自检,如果是根分区要设为1,其他分区只能是2

如果想开机就自动挂载(mount)上,可以在/etc/fstab上添加如下几行:
/dev/hda5 /mnt/d vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0
同时也解决了中文文件名的乱码问题,我的fstab文件如下,仅供参考:
LABEL=/12 / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda4 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/hda1 /mnt/c vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0
/dev/hda5 /mnt/d vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0
/dev/hda6 /mnt/e vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0
/dev/hda7 /mnt/f vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0
/dev/hda8 /mnt/g vfat exec,dev,suid,rw,umask=0,iocharset=gb2312,codepage=936 0 0

fstab解读

从做到右:
/dev/device mount-point type rules dump fsck
1. /dev/device: 不用说了吧?例如,/dev/hda1 为M$-Win9x下的c:盘。
2. mount-point: 挂载点。例如,把/dev/hda1挂到/mnt/mywinc下。
3. type: ext3, vfat, ......就是要挂上的文件系统类型。
4. rules:
auto: 开机自动挂接;
default, noauto: 开机不自动挂接;
nouser: 只有root可挂;
ro: 只读挂接;
rw: 可读可写挂接;
user: 任何用户都可以挂接;
5. dump: 备份;0为从不备份,或显示上次至今备份之天数;
6. fsck: 启动时fsck检查顺序,0为不检查, “/”永远为1;
我的就是:
/dev/hda1 /mnt/mywinc vfat default 0 0

在fstab中加载分区

mkdir /mnt/win_c
vi /etc/fstab
:::::add:::::
/dev/hda1 /mnt/win_c vfat default,pagecode=936,iocharset=cp936 0 0

/etc/fastab释疑

1. fstab文件的作用
文 件/etc/fstab存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过"mount /directoryname"命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或tab键分开。同时fsck、 mount、umount的等命令都利用该程序。
2. fstab文件格式
下面是/etc/fatab文件的一个示例行:
fs_spec fs_file fs_type fs_options fs_dump fs_pass
/dev/hda1 / ext2 defaults 1 1
fs_spec - 该字段定义希望加载的文件系统所在的设备或远程文件系统,对于一般的本地块设备情况来说:IDE设备一般描述为/dev/hdaXN,X是IDE设备通道 (a, b, or c),N代表分区号;SCSI设备一描述为/dev/sdaXN。对于NFS情况,格式一般为:

,例如: `knuth.aeb.nl:/'。对于procfs,使用`proc'来定义。
fs_file - 该字段描述希望的文件系统加载的目录点,对于swap设备,该字段为none;对于加载目录名包含空格的情况,用40来表示空格。
fs_type - 定义了该设备上的文件系统,一般常见的文件类型为ext2 (linux设备的常用文件类型)、vfat(Windows系统的fat32格式)、NTFS、iso9600等。
fs_options - 指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。对于大多数系统使用"defaults"就可以满足需要。其他常见的选项包括:
选项 含义
ro 以只读模式加载该文件系统
sync 不对该设备的写操作进行缓冲处理,这可以防止在非正常关机时情况下破坏文件系统,但是却降低了计算机速度
user 允许普通用户加载该文件系统
quota 强制在该文件系统上进行磁盘定额限制
noauto 不再使用mount -a命令(例如系统启动时)加载该文件系统
fs_dump - 该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0
fs_pass - 该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0
3. 示例文件
# /etc/fstab
/dev/hda9 swap swap defaults 0 0
/dev/hda1 / ext2 defaults 1 1
/dev/hda5 /home ext2 defaults 1 1
/dev/hda6 /usr ext2 defaults 1 1
/dev/hda7 /usr/local ext2 defaults 1 1
/dev/hda8 /var ext2 defaults 1 1
/dev/hdb /cdrom iso9660 noauto,user 0 0
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0


你可能感兴趣的:(Linux,programming)