首页 > 代码库 > Linux 磁盘、文件系统管理

Linux 磁盘、文件系统管理

Linux 磁盘、文件系统管理

                                                                            2016-08-25


本章内容

     □磁盘结构

     分区类型

     管理分区

     管理文件系统

     挂载设备

     管理虚拟内存


第一篇:Linux磁盘管理

  概述:

         计算机的五大组成部件:输入设备、输出设备、存储器、运算器、控制器,其中,输入、输出设备称之为I/O设备,运算器和控制器称之为CPU ,存储器如内存、硬盘等。计算机只有CPU和内存其实就可以独立完成计算任务了,只是其输入输出都在内存中实现,但是,内存属于随机存储单元,断点就会导致数据丢失,因此,我们就通过其他辅助设备来弥补内存的不足,这些辅助设备称之为外存,如:磁盘,光驱等。


一、硬盘

    1.硬盘接口类型:

技术分享

   2.硬盘:固态硬盘和机械硬盘

  3.硬盘存储术语:

     head:磁头

        track:磁道

        平均寻道时间:5400rpm,7200rpm,10000rpm,15000rpm

        cylinder: 柱面 (分区划分基于柱面)

        secotr: 扇区,512bytes

技术分享

技术分享



二、设备文件

    1.一切皆文件:

         open(), read(), write(), close()

    2.设备类型:

        块设备(block):随机访问,数据交换单位是“块”;

        字符设备(character):线性访问,数据交换单位是“字符”

    3.设备文件:FHS  /dev

        关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信

    4.设备号:

        major:主设备号,区分设备类型;用于标明设备所需要的驱动程序;

        minor:次设备号,区分同种类型下的不同设备;是特定设备的访问入口;

    5.mknod命令

         make block or character speclal files

技术分享

         语法:mknod [OPTION]... NAME TYPE [MAJOR MINOR]

                -m MODE :创建后的设备文件的访问权限;



 三、设备文件名:ICANN

      1.磁盘:

           IDE:/dev/hd[a-z]  例如:/dev/hda,/dev/hdb

           SCSI,SATA,USB,SAS:

                不同设备:/dev/sd[a-z]

      2.分区:

            同一设备上的不同分区:1,2...

                /dev/sda#:  如:/dev/sda1...

            CentOS 6和7统统将硬盘设备文件表示为/dev/sd[a-z]

      3.引用设备的方式:

            设备文件名、卷标、UUID



四、磁盘分区:MBR、GPT

MBR: 0 sector 

     1.Master Boot Recor,1982年,使用32位表示扇区数,分区不超过2T

     2.如何分区:按柱面

     3.0磁道0扇区:512bytes,分为三部分

            446bytes: bootloader,程序,引用启动操作系统程序;

            64bytes:分区表,每16bytes: 标识一个分区,一共只能有4个分区;

            2bytes: MBR区域的有效标识,一般55AA为有效;

     4. 4个主分区;3主分区+1扩展(N个逻辑分区)

         主分区和扩展分区的标识:1-4

         逻辑分区只能从5开始(5+)


 GPT分区:

       GUID(Globals Unique Identifiers)partition table 

       支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

       使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位

       UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动



五、管理磁盘

     1.列出块设备:lsblk

     2.创建分区使用:

          fdisk创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区

          gdisk创建GPT分区

          GNU parted高级分区操作(创建、复制、调整大小等等)

     3.partprobe-重新设置内存中的内核分区表版本


fdisk命令

     1.语法fdisk -l [-u] [device...]

               列出指定磁盘设备上的分区情况

技术分享

   2.管理分区         

     fdisk device

     fdisk提供了一个交互式接口来管理分区,他有许多命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直接使用w命令保存至磁盘上;

技术分享

     3.常用命令

           n:创建新分区

           d:删除已有分区

           t:修改分区类型

           l:查看所有分区ID

技术分享           w:保存并退出

           q:不保存并退出

           m:查看帮助信息

           p:显示现有分区表

    注意:在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别

技术分享


同步分区表

     1)查看内核是否已经识别新的分区:

            cat /proc/partations

技术分享

     2)通知内核重新读取硬盘分区表

        新增分区用

            partx-a -n M:N /dev/device

            kpartx-a /dev/device -f: force

        删除分区用

            partx-d -n M:N /dev/DEVICE

            centos6:–nr N-M

        CentOS 5,7: 使用partprobe

        partprobe [/dev/DEVICE]技术分享



六、创建文件系统

相关概念:

     文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

    从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。


1.格式化:

       低级格式化(分区之前进行,划分磁道)

       高级格式化(分区之后进行,创建文件系统)

2.磁盘分区划分为元数据区数据区

元数据区:

     文件元数据(inode):

         包含文件的大小、权限、属主属组、时间戳、数据块指针

     符号链接文件(软链接):

         存储数据指针的空间当中存储的是真实文件的访问路径;

     设备文件

         存储数据指针的空间当中存储的是设备号(major,minor)  

3.文件系统组织结构中的常见术语

      block groups(块组),块组内分为元数据区(inode table中又存放indoe)和数据区(block)

      bitmap index :位图索引 (了解哪些inode已经使用,哪些还没使用) 

      block bitmap:了解哪些磁盘块已经使用,哪些还没有使用;

      superblock:记录当前整个分区上有哪些块组,以及块组的划分   


Linux 的文件系统

1.VFS虚拟文件系统接口,当两个层次之间不衔接时,所加的中间层。因此linux可以引入众多的文件系统类型。

技术分享

2. Linux文件系统:

       ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap

    光盘:iso9660

    Windows:fat32, ntfs

    Unix: FFS(fast), UFS(unix), JFS2

    网络文件系统:NFS, CIFS

    集群文件系统:GFS2, OCFS2(oracle)

    分布式文件系统:ceph, moosefs, mogilefs, glusterfs, Lustre

     RAW:未经处理或者未经格式化产生的文件系统

3.根据其是否支持"journal"功能

     日志型文件系统: ext3, ext4, xfs, ...

     非日志型文件系统: ext2, vfat

4.文件系统的组成部分:

     内核中的模块:ext4, xfs, vfat

     用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

5.查前支持的文件系统:cat /proc/filesystems



内核及文件系统的组成部分:

     文件系统驱动:由内核提供

     文件系统管理工具:由用户空间的应用程序提供



七、文件系统管理工具


1.创建文件系统的工具

   mkfs命令:(按两次Tab键)

技术分享   (1) # mkfs.FS_TYPE /dev/device

            ext4,xfs,btrfs,vfat

  示例:

    创建ext2文件类型

技术分享

     在ext2基础上创建ext3文件类型(区别:多了一个创建日志的功能)

技术分享

     (2) # mkfs -t FS_TYPE /dev/DEVICE  如:(mkfs -t ext2=mkfs.ext2)

                   -L ‘LABEL‘: 设定卷标


mke2fsext系列文件系统专用管理工具

      -t {ext2|ext3|ext4}:指明要创建的文件系统类型

      -b {1024|2048|4096}:指明块大小,默认为4K,最大不超过4K

      -L ‘LABEL‘ :指明卷标

技术分享

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

                mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

      -i#: 指明indoe与字节的比率;即每多少个字节创建一个inode;此大小不应该小于block的大小

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

      -I 一个inode记录大小128---4096

      -m #: 默认5%,为管理人员指定预留空间占总空间的百分比

      -O FEATURE[,...]:启用指定特性

      -O ^FEATURE:关闭指定特性


e2label命令:卷标的查看,预设定

      查看:e2label device技术分享


 tune2fs:查看或修改ext系列文件系统的某些属性;

    adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems;注意:块大小不可修改

   语法:tune2fs [options] devicd

      -l:查看指定文件系统超级块信息;super block

技术分享      -L ‘LABEL‘:修改卷标

      -m #:调整预留给管理员的空间百分比

技术分享

      -j: 将ext2升级为ext3

技术分享

      -O[^]FEATHER: 文件系统属性启用或禁用,–O ^has_journal

技术分享      -o: 开启或关闭文件系统的默认挂载选项,–o ^acl

技术分享      -U UUID: 修改UUID号


dumpe2fs命令

   显示ext系列文件系统的属性信息

    语法:dumpe2fs [-h] device

      -h:查看超级块信息(分组信息),分区用分组管理

技术分享



用于实现文件系统检测的工具

    因进程意外中止或系统崩溃等原因导致操作非正常终止时,可能会造成文件损坏;此时应该检测并修复文件系统,建议离线进行

    常发生于死机或者非正常关机之后

    挂载为文件系统标记为“dirty”


fsck命令

fsck - check and repair a Linux file system

      fsck.FS_TYPE

技术分享

      fsck -t FS_TYPE  如:fsck -t ext4=fsck.ext4

             -a: 自动修复错误

             -r: 交互式修复错误

     注意: FS_TYPE一定要与分区上已经文件类型相同;


e2fsckext系列文件专用的检测修复工具

     语法:e2fsck [OPTIONS] device

         -y:对所有问题自动回答为yes;

         -f:即使文件系统处于clean状态,也要强制进行检测;

技术分享


blkid:块设备属性信息查看

 语法:blkid[OPTION]...[DEVICE]

        -U UUID: 根据指定的UUID来查找对应的设备

        -L LABEL:根据指定的LABEL来查找对应的设备

技术分享

findfs:查找分区

    findfs[options] LABEL=<label>

    findfs[options] UUID=<uuid>



八、其他文件系统

1.swap文件系统

     Linux上的交换分区必须使用独立的文件系统;且文件系统的System ID必须为82;

     创建swap设备:mkswap命令

     语法:mkswap [OPTIONS] device

                -L LIBEL:指明卷标

                -f:强制

2.Windows无法识别Linux的文件系统;因此存储设备需要在两种系统之间交叉使用时,应该使用windows和linx同时支持的文件系统:fat32(vfat)

     # mkfs.vafat device




第二篇:文件系统的使用:挂载

一、相关概念

    1.首先要"挂载":mount和unmount卸载命令

    2.根文件系统之外的其他文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为挂载点;

    3.挂载点:mount_point,作为另一个文件系统的访问入口

          1)事先存在;

          2)应该使用未被或不会被其他进程使用到的目录;

          3)挂载点下原有文件将会被临时隐藏;

    4.卸载:为解除此关联关系的过程

       卸载时:可使用设备,也可以使用挂载点


二、mount命令

    挂载方法:mount DEVICE MOUNT_POINT

     mount:通过查看/etc/mtab文件显示当前已挂载的所有设备

技术分享

    语法:mount [-fnrsvw] [-t vfstype] [-o options] device dir

    device:指明要挂载的设备;

        (1) 设备文件:例如/dev/sda5

        (2) 卷标:-L ‘LABEL‘, 例如-L ‘MYDATA‘

        (3) UUID, -U ‘UUID‘:例如-U ‘0c50523c-43f1-45e7-85c0-a126711d406e‘

        (4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs

    dir:挂载点

        事先存在;建议使用空目录

        进程正在使用中的设备无法被卸载


mount命令用法

   语法:mount [-nrw] [-t vfstype] [-o options] device dir

   命令选项:

        -r: readonly,只读挂载

技术分享

        -w: read and write, 读写挂载

        -n: 在默认情况下,设备挂载或卸载的操作同时会更新至/etc/mtab文件中,-n 用于禁此特性

        -t vsftype:指定要挂载的设备上的文件系统类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统的类型;

        -a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)

        -L ‘LABEL‘: 挂载时以卷标的方式指明挂载设备

               mount -L LABEL dir

技术分享        -U ‘UUID‘: 挂载时以UUID指定要挂载的设备

              mount -U UUID dir

技术分享

        -B, --bind: 将目录绑定至另一个目录上,作为其临时访问入口

技术分享



-o options:(挂载文件系统的选项),多个选项使用逗号分隔

     async:异步模式

     sync:同步模式,内存更改时,同时写磁盘

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

     diratime/nodiratime:目录在被访问是是否更新其访问时间戳

     auto/noauto:是否支持自动挂载,是否支持-a选项

     exec/noexec:是否允许运行此设备上的程序文件;

     dev/nodev:此设备上是否允许创建设备文件;

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

     remount:重新挂载

     ro:只读

     rw:读写

     user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载

     acl:启用此文件系统上的acl功能

            # mount -o acl device dir

            # tune2fs -o acl device

技术分享

     defaults:相当于rw, suid, dev, exec, auto, nouser, async  


查看当前系统已挂载的所有设备

      # mount

      # cat /etc/mtab

      # cat /proc/mounts

挂载光盘:

      mount -r /dev/cdrom mount_point

      光盘设备文件:/dev/cdrom,/dev/dvd

挂载U盘:

      事先识别U盘的设备文件

挂载本地回环设备:

     # mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT


unmount命令

     正在被进程访问到的挂载点无法被卸载

     查看挂载情况:

          # findmnt MOUNT_POINT

     查看被那个或者哪些进程所占用:

          # lsof MOUNT_POINT

          # fuser -v MOUNT_POINT

技术分享

     终止所有在正访问指定的文件系统的进程:

          # fuser -km MOUNT_POINT

技术分享

     卸载:

          # umount DEVICE

          # umount MOUNT_POINT



交换分区的启用和禁用:

    创建交换分区的命令:mkswap

     启用:swapon

            swapon [OPTION][DEVICE]

                -a:所有设备

     禁用:swapoff

            swapoff DEVICE

技术分享


设定除根文件系统以外的其他文件系统能够开机时自动挂载:/etc/fstab

   /etc/fstab每行定义一个要挂载的文件系统及相关属性;

        6个字段:

           1)要挂载的设备

                设备文件;

                 LABEL(LABEL="")

                 UUID(UUID="")

                 伪文件系统

           2)挂载点

                 swap类型的设备的挂载点为swap;

           3)文件系统类型

           4)挂载选项

                 defaults:使用默认挂载选项

                 如果要同时指明多个挂载选项,彼此间逗号分隔;

           5)转储频率

                 0:从不备份

                 1:每天备份

                 2:每隔一天备份

           6)自检次序

                 0:不自检;

                 1:首先自检,通常只能是根文件系统可用;

                 2:次级自检

                 ...

mount -a:可自动挂载定义在此文件中的所支持自动挂载的设备



df命令:文件系统空间占用等信息的查看工具:

     df [OPTION]... [FILE]...

          -l:仅显示本地文件的相关信息;

          -H 以1000为单位

          -T 文件系统类型

          -h: human-readable

          -i:显示inode的使用状态而非block

          -P: 以Posix兼容的格式输出

du命令查看某目录总体空间占用状态:

     du [OPTION]... DIR

          -h: human-readable

          -s: summary





        


        

         




        


        

         





Linux 磁盘、文件系统管理