Linux磁盘分区及文件系统管理

这篇文章主要讲解了“Linux磁盘分区及文件系统管理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux磁盘分区及文件系统管理”吧!

一、Linux磁盘 

   iops :  io per second
   磁盘接口类型:
       IDE  : 并口,在高频下容易出错,133MB/s;
       SATA : 串口,可高频,6gbps(1gbps=128MB/s)
       SCIS : 并口,ultrascsi320 ,320MB/s
       SAS  : 串口,6gbps
       USB  : 串口,480MB/s
    硬盘类型:
        机械硬盘
            track :磁道
            sector:扇区
            cylinder: 柱面,分区基于柱面;
            平均寻道时间: 5400rpm,7200rpm,10000rpm,15000rpm
                (铀分离的设备的转速达到30000rpm,机械硬盘这个转速已经很厉害了)
                高转速产生大量的热能,任何微小的尘粒在如此高转速下都会对硬盘造成影响)
    linux的设备类型:
        块(block) : 随机访问;  
        字符(character):线性访问;
    设备文件: FHS
         /dev
           设备文件: 关联至设备的驱动程序,设备的访问入口;
           设备号:
               major:主设备号,区分设备类型,用于标明设备所需要的驱动程序;
               minior:次设备号,区分同种类型下的不同的设备,是特定设备的访问入口;
    设备文件名
            磁盘:
               IDE:/dev/hd[a-z]
               SCSI,SATA,SAS,USB: /dev/sd[a-z]
            注意: Centos6和7统统将磁盘设备文件标识/dev/sd【[a-z]#
               如 /dev/sda
                  /dev/sda1,/dev/sda2;... 
    引用设备的方式: 设备文件名,卷标,UUID

    磁盘分区:

    MBR及其使用:
       MBR: Master Boot Record 
       特点:
            占据磁盘0号sector,512bytes,分为三部分:
            446bytes:bootloader程序,引导启动操作系统;
            64bytes : 分区表,每16个bytes标识一个分区,一共只有4个分区;
                4个主分区或者3主+1个扩展分区(多个逻辑分区);
            2bytes  : MBR区域的有效性标识,55AA为有效;

   GPT及其使用。

      GPT:Globally Unique IdentifierPartition Table Format  全局唯一标识符分区表。
      特点:
          驱动器上的每个分区都有一个全局唯一的标识符;
          支持几乎无限个分区数量,除非操作系统作出了限制;
          MBR占用的第一个sector现在是LBA0,GPT使用了34个LBA区块来纪录分区信息(第一个sector依然兼容的MBR);
          GPT 除了前面34个LBA 之外,整个磁盘的最后33个LBA也拿来作为另一个备份。
             LBA0 (MBR 相容区块)与MBR模式相近,前446B还是boot loader,后64B换成一个特殊标记,用于表面此磁盘是GPT格式。
             LBA1 (GPT 表头纪录)纪录分区表本身的位置与大小,备份 GPT 分区 放置的位置,以及校验码
             LBA2-33 (实际纪录分区信息处)从LBA2区块开始,每个LBA都可以纪录4个分区纪录,所以在默认的情况下,总共可以有4^32 = 128个分区纪录
        传统BIOS---->MBR格式。
        UEFI    ---->MBR格式+GPT格式  (Unified Extensible Firmware Interface:统一的可扩展固件接口)

  linux下GPT分区:

      这里使用parted命令,fdisk也有gpt分区操作。
        (1)[root@localhost tmp]#parted;
        (2)help;
        (3)select device;
        (4)mklabel gpt;
        (5)mkpart;  
                   ---输入分区名字;
                   ---文件系统;
                   ---起始点,不要用0开头;
                   ---终结点;
                   ---起始点,可以用#G;
            此时已经分区成功
        (6)print 查看
        (7)quit
[root@localhost tmp]# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sdd
Using /dev/sdd
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdd will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes                                                               
(parted) mkpart                                                           
Partition name?  []? mygpd_data                                           
File system type?  [ext2]? ext4                                           
Start? 1                                                                  
End? 2G                       
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdd: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name        Flags
 1      1049kB  2146MB  2145MB               mygpd_data

 二、fdisk命令

 1.查看 fdisk -k device
   2.管理 fdisk device
     fdisk 提供了一个交互式接口来管理分区,具有多个子命令;所有操作均在内存中完成;
     没有直接同步到磁盘,直到使用w命令保存到磁盘上;
     注意: 在已经分区并且已挂载其中某个分区的磁盘设备上创建新的分区,内核可能在其创建完成后无法识别;
        查看: cat /proc/partitions
        通知内核,强制读取磁盘分区:
           centos5: partprobe device;
           centos6.7: 
                 partx -a device
                 kpartx -a device
   分区创建工具:parted ; sfdisk

三、文件系统创建

      格式化: 
        低级格式化,分区之前,划分磁道;
        高级格式化,分区之后对分区创建文件系统,
            superblock,i节点inode table,数据块data block,目录块directory block,
            间接块indirection blockblock ,位图索引inode bitmap,block bitmap;
      元数据区+实际数据区
      元数据区:inode table
            文件元数据:文件大小,权限、宿主宿组、时间戳、数据块指针等,不记录文件名;
            元数据区对每一个文件的信息记录格式是统一的,给出一个模板然后根据文件的实际情况填写而已;
        数据块指针的记录内容是有限的,决定了文件的大小上限。根据数据块指针到数据区取得文件的实际数据。 
        符合链接文件:存储数据指针的空间中存储了文件的真实访问路径。
        设备文件:   存储数据指针的空间中存储了设备号。
        这两种文件都不占据数据区。

    VFS: Virtual File System 解决不同文件系统之间的互认问题。

Linux文件系统: ext2,ext3,ext4,xfs,btrfs
       光盘: ISO9660
       网络文件系统: nfs,clfs
       集群文件系统: gfs2,ocfs2
       内核级分布式文件系统: ceph
       
       windows文件系统:vfat,ntfs
              windows无法识别linux的文件系统,因此,存储设备在需要两种系统之间交叉使用时,
          应使用两者同时支持的文件系统:vfat
              # mkfs.vfat device
          注意: U盘格式为ntfs的话,可以用一个NTFS-3G的插件,安装后linux可以支持NTFS文件,linux将其识别为ntfs-3g文件系统
               ntfs-3g-ntfsprogs-2011.3.32.tgz
          解压后执行./config   make  makeinstall  编译安装
          若U盘被识别为sda3设备,则执行如下指令
          #mount -t ntfs-3g /dev/sda /mnt/win
          
       伪文件系统:proc,sysfs,tmpfs,hugepagefs
           用户空间的分布式文件系统: mogilefs,moonsefs,glusterfs
           交互文件系统:swap;
           linux上交互分区必须使用独立的文件系统,该system ID必须为82,通过fdisk上的t进行设置;
           创建swap文件系统:  mkswap  device
            启用       :   swapon devcie
                              -a : 启用在/etc/fstab文件中所有的swap设备。
            禁用       :   swapoff devcie
        创建一个大小为1G的swap分区,并启用。
[root@localhost ~]# fdisk /dev/sde
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): +1G     
Partition 1 of type Linux and of size 1 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'
Command (m for help): w
The partition table has been altered!
[root@localhost ~]# mkswap /dev/sde1
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=adcb05b1-3368-4e97-80c8-7ed13e959c63
[root@localhost etc]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3778         380         166           6        3231        3140
Swap:          2047           6        2041
[root@localhost etc]# swapon /dev/sde1
[root@localhost etc]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3778         381         165           6        3231        3139
Swap:          3071           6        3065

四、文件系统使用

 1.创建文件系统工具: mkfs
      mkfs.ext2;  mkfs.ext3; mkfs.ext4; mkfs.xfs;
   查看文件系统类型:  blkid device;
   mke2fs命令
     mke2fs [OPTIONS] device
       -t {ext2|ext3|ext4}
       -b {1024|2048|4096}
       -L  LABEL卷标
       -j  创建日志功能文件系统ext3
       -i # 多少个字节一个inode
       -N # 创建inode的总数
       -m # 预留空间,百分表
       -O [^] 以指定的特性创建目标文件系统;
练习:创建一个1G的分区,并格式化为ext4文件系统。要求:
(1)block大小为2048,预留空间20%,卷标为MYDATA,
[root@localhost tmp]# fdisk /dev/sde  
        Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): +1G
Partition 1 of type Linux and of size 1 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
root@localhost tmp]# mke2fs -t ext4 -b 2048 -L MYDATA -m 20 /dev/sde1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=MYDATA
OS type: Linux
Block size=2048 (log=1)
Fragment size=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 524288 blocks
104857 blocks (20.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268959744
32 block groups
16384 blocks per group, 16384 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
        16384, 49152, 81920, 114688, 147456, 409600, 442368
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

  2.文件系统挂载与卸载  

挂载与卸载: mount umount
    根文件系统外的其它文件系统,要想能够被访问到,都必须通过‘关联’至根文件系统上的某个目录来实现,
  此‘关联’操作即‘挂载’,此目录即为挂载点。
    挂载点: mount point 用于作为另一个文件系统的访问入口
       (1): 事先存在;
       (2): 应用使用未被或或不会被其它目录进程使用的目录;
       (3): 挂载点下原有的文件建会被隐藏;
        思考一个问题:将一个装有linux系统的磁盘(根文件系统A)接到另一台linux系统(B)的设备上,然后挂载在B系统一个目录下,
            B上的某用户(root或者普通用户)对A文件的读写执行权限?
          mount [-fnrsvw] [-t vfstype] [-o options] device dir
             -r:  只读
             -w:  读写(默认选项)
             -n:  禁止同步(默认情况下,设备挂载与卸载都同步到/etc/mtab中)
             -t --vfstype:  指定文件类型
             -L --LABEL: 以label方式指明设备
             -U --UUID : 以uuid方式指明设备
             -o : 自动挂载所有支持自动挂载的设备
                sync/async: 同步/异步
                atime/noatime: 是否更新其访问的时间戳
                diratime/nodiratime: 只针对目录时间戳
                remount: 重挂
                acl: 支持使用acl功能
                  #mount -o acl device dir
                  #mount -o alc device
                ro:只读
                rw:读写
                exec/noexec  是否允许运行此设备上的文件  
      使用技巧:mount --bind 源目录 目标目录,  可以实现将目录绑定至另一个目录上,作为其临时访问入口。
      查看当前系统所有已挂载设备:
      # mount
      # cat /etc/mtab
      # cat /proc/mounts
        umount [-dflnrv] {dir|device}...
             正在被进程访问的挂载点无法被卸载
      查看被何进程使用:
      #lsof mount_point
      #fuser -v mount_point
 
[root@localhost /]# fuser -v /dev/sde1
USER        PID ACCESS COMMAND
/dev/sde1:    root     kernel swap  /dev/sde1

3.除根文件以为的其它文件开机自动挂载

  /etc/fstab

UUID=795d1641-c4f8-4f72-911b-6eedfe2ac733 /          xfs     defaults        0 0
UUID=ecde1354-5470-4692-bc2b-9cc94bd3b11c /boot        xfs     defaults        0 0
UUID=ad488060-c1c6-4871-a8e2-228de0b90457 swap         swap    defaults        0 0
        (1)要挂载的设备:设备文件,LABEL,UUID,伪文件系统
        (2)挂载点,swap类型的挂载点为swap
        (3)文件系统类型
        (4)挂载选项
        (5)转储频率,0从不,1每天,2每隔一天
        (6)自检次序
接上面的练习:
   (2) 挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳。
   (3)可开机自动挂载。
[root@localhost mydata]# mount -o noatime noexec -L MYDATA /mydata   ---错误,o后面的参数以,分隔
[root@localhost mydata]# mount -o noatime,noexec -L MYDATA /mydata
[root@localhost /]# vim /etc/fstab 
UUID=795d1641-c4f8-4f72-911b-6eedfe2ac733 /      xfs     defaults        0 0
UUID=ecde1354-5470-4692-bc2b-9cc94bd3b11c /boot    xfs     defaults        0 0
UUID=ad488060-c1c6-4871-a8e2-228de0b90457 swap    swap     defaults        0 0
LABEL=MYDATA                /mydata   ext4     defaults        0 0

感谢各位的阅读,以上就是“Linux磁盘分区及文件系统管理”的内容了,经过本文的学习后,相信大家对Linux磁盘分区及文件系统管理这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!