码迷,mamicode.com
首页 > 其他好文 > 详细

创建文件系统

时间:2017-05-28 23:50:01      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:文件系统   查询   调整   

在说完了磁盘的分区之后,该说的就是创建文件系统了,一块磁盘在使用之前只是一块有磁性的物品而已,需要我们人为的对其进行规划。所以使用磁盘的第一步是格式化。格式化分为低级格式化和高级格式化。低级格式化是在物理层面完成格式化,在磁盘设备出厂的时候,通过低级格式化来创建磁道。在低级格式化完成之后,磁盘就具有了能够使用的功能。但是我们要想往里头存数据,还需要更进一步的格式化,就叫做高级格式化,是在分区之后进行的,它的作用是用来创建文件系统,为分区构建逻辑编址单元、簇和块来完成数据的存储。在这里的一个块只能放置一个文件的内容,而一个文件能够占用多个块,所以如果一个分区在使用的时候已经确定要创建大量的小文件,就把块划分的小一些,反之就大一些。当然,如果分区空间比较大,块也应该大一些。

低级格式化是不用我们来完成的,在出厂的时候就已经被低级格式化了,我们需要做的是高级格式化。那么高级格式化具体做什么呢?来看一看百度百科是这么说的“高级格式化又称逻辑格式化,它是指根据用户选定的文件系统(如FAT12、FAT16、FAT32、NTFS、EXT2、EXT3等),在磁盘的特定区域写入特定数据,以达到初始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个操作。高级格式化包括对主引导记录中分区表相应区域的重写、根据用户选定的文件系统,在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间,以便用户使用该分区管理文件”。简单来说就是为分区创建文件系统。创建文件系统实际上就是给分区进行存储空间的逻辑编址。

在一个分区中创建文件系统的步骤为先将分区划分成大小相等的若干块,其中包括:

1.元数据块——记录的是元数据——inode(index node)、文件的属性、文件大小、文件权限、文件所有者、文件时间戳和数据块指针。存放元数据的固定的存储空间,称为inode,每个inode都有其对应的inode编号。

2.数据块——存放文件中所包含的流式数据

数据都存在数据块中,如果想要查找/var/log/messages文件的内容,首先查找/目录inode编号,从元数据区域中找到对应inode,再读取inode中的数据块指针,找到存放/目录内容的数据块。在数据块中查找名称为var的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存var目录内容的数据块。然后,在该数据块中查找名称为log的文件名,如果有,就定位其inode编号,再到元数据区域中查找对应编号的inode,再根据数据块指针找到保存log目录内容的数据块。之后,在该数据块中查找名称为messages的文件名,如果有,就定位其inode编号,再到元数据区域总查找对应编号的inode,再根据数据块指针找到messages文件对银的数据块,就可以读取数据。这种方法看起来十分麻烦,但是方便了我们对文件的管理,同时系统会将上面说的这些操作封装起来,我们只需要知道这个流程即可,并不用我们自己按照这种方法查找文件。

在文件系统中存在这一些特殊的东西,他们也很重要,分别有各自的功能:

1.特殊文件——像设备文件:block special 或 character special,这类文件仅仅是将元数据中的数据块指针换成了设备号。还有符号链接文件:symbolic link,这类文件仅仅是将元数据中的数据块指针换成了另一个文件的访问路径。想这种特殊文件,只占据元数据区域,没有数据块占用。

2.块组——随着磁盘空间越来越大,划分的块的数量也越来越多,管理起来很不方便,而划分块组可以解决该问题。每个块组中有独立的元数据块和数据块,存放数据的时候,以块组内的数据块优先选择,如果块组内的数据块不够,可以通过存储策略来请多个块组协同存储。

3.超级块——主要定义了有多少个块组,以及每个块组的边界。

4.日志块——为了防止超级块发生故障倒置整个文件系统崩溃,对超级块进行冗余备份,对于数据的写入操作做记录的块,目的在于防止数据不一致,而这种数据不一致通常都是由不洁关机或不洁断电导致的。

在不同的分区中有自己不同的文件系统,大致有以下这些:


Linux的文件系统:

 ext ext2 ext3 ext4(支持的最大分区50TB)

 xfs(企业级64位文件系统,最大分区500TB)

 reiserfs(良好的反删除功能)

 btrfs(技术预览版)

交换分区文件系统:swap

光盘文件系统:iso9660

网络文件系统:NFS、CIFS

集群文件系统:gfs2、ocfs2

内核级的分布式文件系统:ceph

伪文件系统:proc、sysfs、tmpfs、hugepagefs

windows的文件系统:vfat,ntfs

Unix的文件系统:ufs,FFS,JFS,zfs

用户空间中的分布式文件系统:mogilefs,moosefs,glusterf


不同的CentOS系统版本默认的文件系统也不同,分别为:

CentOS5:ext3

CentOS6:ext4

CentOS7:xfs


有关于文件系统的工具分为以下四类(括号里的为这个命令的衍生版):

 创建文件系统——mkfs(mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.btrfs, ...)

 文件系统检测和修复工具——fsck(fsck.ext3, fsxk.ext3, fsck.ext4, fsck.xfs, ...)

 文件系统属性查看工具——dumpe2fs

 文件系统的属性调整工具——tune2fs


下面对这些命令进行介绍:

创建文件系统工具(fdisk命令可以在):

mkfs命令创建文件系统:

mkfs - build a Linux filesystem

mkfs [options] [-t type] [fs-options] device [size]

使用-t选项指定要创建的文件系统的类型,比如:

mkfs -t ext2 /dev/sdb1

注意:

如果使用磁盘设备作为mkfs的参数,所有的分区都将被删除

如果使用扩展分区作为mkfs的参数,所有的逻辑分区都将被删除


在上面提到的mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.btrfs,...就是这个命令的简写版本,比如:

mkfs.ext4等同于mkfs -t ext4 /dev/sdb1


而如果只是计划创建ext系列文件系统的话,可以使用mke2fs命令:

mke2fs - create an ext2/ext3/ext4 filesystem

常用选项:

 -b block-size:在创建文件系统时,调整块大小;

 -i bytes-per-inode:指明inode与字节的比率,即:多少个字节可以建一个inode,默认值为16384;

 -j:创建有日志功能的文件系统,就是ext3

 -N number-of-inodes:直接指明要给此文件系统创建的inode的数量;

 -m reserved-blocks-percentage:指定为超级用户root预留的磁盘空间的百分比;默认是5;

 -t fstype:指定文件系统类型,ext2 ext3 ext4,默认是ext2

 -O [^]feature[,...]:关闭或开启文件系统的特性

 -L volume-label:为文件系统指定卷标

使用方法和mkfs类似,例如:

mke2fs -t ext3 /dev/sdb1


如果只计划修改ext系列文件系统的卷标,可以使用e2label命令:

e2label - Change the label on an ext2/ext3/ext4 filesystem

e2label device [ new-label ]

 如果不加卷标信息,表示查看指定设备的卷标;

 如果添加了卷标信息, 表示修改指定设备的卷标;

e2label /dev/sdb1 LabelName


如果想要修改ext系列文件系统的属性,可以使用tune2fs命令:

tune2fs:

tune2fs  - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems

 用来调整那些在ext2,3,4文件系统上的可修改的参数;

常用选项:

 -j:将ext2文件系统修改为ext3;

 -m reserved-blocks-percentage:修改为超级用户预留的磁盘空间的百分比;

 -o [^]mount-options[,...]:修改文件系统的默认挂载选项;

 -r reserved-blocks-count:修改为超级用户预留的磁盘空间的块的数量;

 -L volume-name:修改文件系统的卷标

 -O [^]feature[,...]:修改文件系统的特性,将其关闭或启用;

 -l:显示超级块的内容  相当于dumpe2fs -h 

使用这个命令可以修改文件系统的属性,例如使用-j选项可以将“ext2”修改为“ext3”文件系统,例如:

tune2fs -j /dev/sdb1    #当然要想使用这个命令前,文件的系统必须为“ext2”


文件系统的检测修改工具:

fsck

 -t fstype:指定要检测的文件系统类型;

 -a:无需交互,自动修复所有问题

 -r:交互式修复问题


ext系列文件系统专门的检测修复工具:

 e2fsck

  -y:在交互过程的所有的问题,都以"yes"回答;

  -f:强制检测修复;即使文件系统处于clean状态;


blkid:用来查看设备信息(UUID等)

blkid - command-line utility to locate/print block device attributes

 blkid -L label:根据卷标进行查找

 blkid -U uuid:根据UUID进行查找


findfs:

findfs - Find a filesystem by label or UUID

 findfs LABEL=label

 findfs UUID=uuid


创建swap文件系统

 前提:分区类型必须是swap类型

修改的方法是:在fdisk交互模式中,使用t命令将指定分区的类型修改为82即可;

mkswap

mkswap - set up a Linux swap area

 -L LABEL:设置交互分区的卷标

 -f:强制执行


在为分区建立了文件系统之后我们就可是使用这个分区了,但是就像是一个U盘,我们必须将其插到电脑上才能真正的使用这个U盘,这个操作在Linux中叫做挂载,使用使用mount命令完成挂载操作。根文件系统之外的其他文件系统如果想要被访问;都必须通过某种方式关联到根文件系统上,具体做法就是把其他文件系统装载到根文件系统中的某个目录之中。这个过程称为"挂载"。用于关联其他文件系统的那个目录,称为挂载点(mount point)。作为挂载点的目录必须事先存在,并且应该是没有被使用或不能被其他进程使用的目录。作为挂载点的目录一旦挂载文件系统,其内原有的文件将被隐藏,也就是说创建了一个目录作为挂载点,而这个目录中原本就有内容,那么挂载之后再进入这个目录就会进入被挂载的设备,因而访问不到原来目录中的文件。下面是mount命令的常见选项:

mount - mount a filesystem

mount [-fnrsvw] [-t vfstype] [-o options] device dir

常用选项:

 -r:readonly,以只读的方式挂载目标文件系统;光盘

 -w:read and write,以读写的方式挂载目标文件系统;

 -n:默认情况下,设备挂载或卸载的操作会同步更新到/etc/mtab中,如果在挂载时使用了-n选项,则表示我们要禁用此特性,即便挂载成功,也不会更新到/etc/mtab中。

 -t vsftype:指明要挂载的设备上创建的文件系统类型;如果省略该选项,mount命令会通过blkid来判断要挂载的目标设备的文件系统类型;

 -L LABEL:挂载文件系统时,使用卷标代替设备名称

 -U UUID:挂载文件系统时,使用UUID代替设备名称

 -a:mount -a:按照/etc/fstab文件(下面会介绍这个文件)中填写的设备进行自动挂载;

 -o option:

   sync/nosync:同步/异步操作

   atime/noatime:文件或目录被读取访问时,是否更新访问时间戳;

   diratime/nodiratime:目录被读取访问时,是否更新访问时间戳;

   ro/rw:是以只读/读写的方式挂载文件系统;

   dev/nodev:在此文件系统中是否允许创建设备文件;

   exec/noexec:在此文件系统中是否允许运行程序文件;

   auto/noauto:是否允许使用mount -a方式挂载/etc/fstab中的文件系统;

   user/nouser:是否允许普通用户挂载此文件系统;

   suid/nosuid:是否允许程序文件上的SUID和SGID特殊权限生效;

   relatime/norelatime:是否参考inode访问时间来修改其修改时间和改变时间

   remount:不经卸载实现重新挂载,可以应用新的挂载选项;

   acl:可以使文件系统支持facl功能;

   defaults:默认选项;包括:rw, suid, dev, exec, auto, nouser, async, and relatime

   loop:使用环回设备;将镜像文件挂载到挂载点;

   defaults,ro,nosuid

 -B, --bind:将某个目录绑定至另一个目录;

 mount --bind|-B 源目录 目标目录

使用这个命令的时候如果不给出参数,那么在屏幕上显示的是所有已经被挂载的信息。挂载的命令可以写成以下格式:

mkdir -pv /media/sdb #首先要创建挂载点
mount /dev/sdb1 /media/sdb/ 
#然后就可以使用这个命令进行挂载,可以在这个命令的基础上根据自己想要的功能添加不同的选项。值得注意的是这个命令的两个参数第一个是设备,第二个才是挂载点,一定不能写反了

既然有了挂载,那么就一定需要卸载,使用umount这个命令进行卸载。这个命令后头的参数既可以是设备名,也可以是挂载点的名字,达到的效果都是一样的。我们可以做一个实验,就是挂载一个设备,在里头创建一个文件,然后卸载这个设备,然后再挂载这个设备。每执行一步操作就去观察挂载点目录中的文件的变化,可以发现设备中和挂载点中的文件互不影响。就像U盘一样,拔下再插上,其中的信息并不丢失。

光盘的设备名为/dev/sr0,可以对其进行挂载和卸载实验。

交互分区有自己的挂载命令——swapon(挂载), swapoff(卸载)

在最后说一说上面提到的/etc/fstab文件,这个文件是提供给系统的,供系统在开机的时候自动完成挂载。但是我们可以对其进行修改,然后配合mount或swapon的“-a”选项来从这个文件中读取挂载的信息。下面是对/etc/fstab文件中各个字段含义的解释:

每一行从左到右共6个字段,使用空白字符分隔:

1.要挂载的设备(可以为以下内容)

 设备文件名

  LABEL

  UUID

 伪文件系统

2.挂载点(swap设备无需挂载点,指定swap即可)

3.文件系统类型

4.挂载选项:defaults(也可以是在mount命令中提到的其他选项)

5.转储频率(使用dump命令备份分区的频率)

 0)表示不备份

 1)每天备份一次

 2)每隔一天备份一次

6.自检次序

 0)不自检

 1)优先自检,通常只设置在根文件系统上;

 2)次级自检

 ...

9:最低优先级自检

下面做一个简单的挂载例子:

 这个是原本的内容:

#
# /etc/fstab
# Created by anaconda on Sun Mar  5 23:34:53 2017
#
# 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
#
UUID=b95007c7-b67c-44cd-9358-a5e6c641f359 /                       xfs     defaults        0 0
UUID=cb6a4053-6e82-431e-819c-f84ce24bc53b /boot                   xfs     defaults        0 0
UUID=dbff2573-f90e-45a4-9d6d-eea9d5ff71b3 swap                    swap    defaults        0 0

然后我们可以在最后加上一行(格式不用对齐,只要用空格分开即可)

UUID=6d550301-ac28-4dc5-9056-b489b16cd182 /media/sdb/ ext3 defaults 0 0

UUID可以使用blkid命令,找到自己要挂载的那个设备。然后保存这个文件。保存之后执行“mount -a”命令即可实现自动挂载。

创建文件系统

标签:文件系统   查询   调整   

原文地址:http://11142243.blog.51cto.com/11132243/1930481

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!