Linux 磁盘和文件系统管理1

一、磁盘介绍

      磁盘(disk)是指利用磁记录技术存储数据的存储器。

      磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。

1、硬盘

     硬盘的容量以兆字节(MB)或千兆字节(GB)为单位,1GB=1024MB,1TB=1024GB。但硬盘厂商在标称硬盘容量时通常取1G=1000MB,因此我们在BIOS中或在格式化硬盘时看到的容量会比厂家的标称值要小。

2、硬盘的分类

1)从工作原理可分为:

     机械硬盘(Hard Disk Drive, 简称HDD):所有的盘片都装在一个旋转轴上,采用磁性碟片来存储数据,读写速度慢,怕摔、怕磁,(单位换下来的坏盘会做消磁处理)。

     固态硬盘(Solid State Disk, 简称SSD):内部不存在任何盘片的机械部件,通过闪存颗粒来存储数据,读写速度快,价格相对贵。

     固态硬盘和传统的机械硬盘最大的区别就是不再采用盘片进行数据存储,而采用存储芯片进行数据存储。固态硬盘的存储芯片主要分为两种:一种是采用闪存作为存储介质的;另一种是采用DRAM作为存储介质的。目前使用较多的主要是采用闪存作为存储介质的固态硬盘。

    

2)从硬盘的接口可分为:

     SATA接口、SAS接口、MSATA接口、PCI-E接口、NGFF接口、CFast接口等,SCSI和IDE接口已淘汰。

3、机械硬盘结构

     

       机械硬盘主要由磁盘盘片、磁头、主轴与传动轴等组成,数据就存放在磁盘盘片中,上下盘面同时进数据读取的。硬盘是上下双磁头,盘片在两个磁头中间高速旋转。所以机械硬盘在读取或写入数据时,非常害怕晃动和磕碰。

       机械硬盘的逻辑结构主要分为磁道、扇区和拄面。看下图:

          

       磁道:以盘片中心为圆心,把盘片分成若干个同心圆,那每一个“线条”划分出的每一个同心圆,就称为磁道。(注意,磁道只是逻辑结构,在盘面上并没有真正的同心圆)。磁道从外向内自0开始顺序进行编号,各个磁道上的扇区数是在硬盘格式化时确定的。

       扇区:在盘片上每个同心圆是磁道,把盘片划分成若干个扇形的区域,就是扇区。每个扇区的大小是固定的,为 512Byte(相当于0.5KB)。扇区也是磁盘的最小存储单位。

       柱面:如果硬盘是由多个盘片组成的,多个盘片中具有相同编号的磁道会形成一个圆柱,这个圆柱就被称作磁盘的柱面。磁盘中有多少个磁道,就有多少个柱面。见上图。

硬盘的大小/存储容量 = 磁头数 x 柱面数 x 扇区数 x 每个扇区的大小。  其中,

磁头数(Heads)表示硬盘共有几个磁头,也可以理解为硬盘有几个盘面,然后乘以 2;

柱面数(Cylinders)表示硬盘每面盘片有几条磁道;

扇区数(Sectors)表示每条磁道上有几个扇区;

每个扇区的大小一般是 512Byte。

 

二、Linux 文件系统的组成

      Linux 文件系统由文件名,inode和block三部分组成 。通常情况下,文件系统会将文件的实际内容和属性分开存放:

       文件的属性保存在 inode (i 节点)中,每个 inode 都有自己的编号。每个文件各占用一个 inode。不仅如此,inode 中还记录着文件数据所在 block 块的编号;

       文件的实际内容保存在 block (数据块)中,用来真正存放数据的地方。每个 block 都有属于自己的编号。当文件太大时,可能会占用多个 block 块。

       另外,还有一个 super block(超级块)用于记录整个文件系统的整体信息,包括 inode 和 block 的总量、已经使用量和剩余量,以及文件系统的格式和相关信息等。

注意:inode 节点并不存储文件的文件名,因为文件名是文件所在目录的数据,所以会保存在上一级目录的 block 块中。要对文件的上一级目录拥有 w 权限,才能删除目录中的文件,就是因为文件名是保存在目录的 block 中的。

由此可以推断出,只要能找到文件 inode 所在的位置,就能知道这个文件存放数据的 block 号,从而找到文件的实际数据。

下面inode参考文章:理解inode 通俗易懂,非常好。

(一)inode

1、inode是什么?

      文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

      操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

      文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

      每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

2、inode的内容

      inode包含文件的元信息,相当于windows的文件的属性:

文件的字节数
文件拥有者的User ID
文件的Group ID
文件的读、写、执行权限
文件的时间戳,共有三个:
    - ctime指inode上一次变动的时间,
    - mtime指文件内容上一次变动的时间,
    - atime指文件上一次打开的时间。
链接数,即有多少文件名指向这个inode
 文件数据block的位置

可以用 stat 命令,查看某个文件的inode信息:    

[root@centos7 ~]# stat ./abc/file2.cfg 
  文件:"./abc/file2.cfg"
  大小:1440            块:8          IO 块:4096   普通文件
设备:803h/2051d        Inode:4656        硬链接:1
权限:(0764/-rwxrw-r--)  Uid:( 1000/    lisi)   Gid:( 1001/  g_lisi)
最近访问:2020-01-19 11:20:21.322358423 +0800
最近更改:2019-12-12 14:22:34.593080610 +0800
最近改动:2020-01-04 14:40:54.145424326 +0800
创建时间:-

总之,除了文件名以外的所有文件信息,都存在inode之中。  

3、inode的大小

      inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

      每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

     查看每个硬盘分区的inode总数和已经使用的数量,可以使用 df 命令

[root@centos7 ~]# df -i ./abc/file2.cfg
文件系统         Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda3      9332224   40541 9291683       1% /

4、inode号码

      每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

      这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

      表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

      使用 ls -i 命令,可以看到文件名对应的inode号码:  

[root@centos7 ~]# ls -i ./abc/file2.cfg 
4656 ./abc/file2.cfg

5、目录文件

      Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

      目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。     

      ls 命令只列出目录文件中的所有文件名。

      ls -i 命令列出整个目录文件,即文件名和inode号码。如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。

      ls -l 或 ll 命令列出文件的详细信息。

[root@centos7 ~]# ls ./abc 
aa_dir  aa_dir.tar  aa_dir.tar.bz2  aa_dir.tar.gz  aa_dir.zip  bb_dir  file2.cfg  test22

[root@centos7 ~]# ls -i ./abc
   20977 aa_dir      33596178 aa_dir.tar.bz2  33667746 aa_dir.zip      4656 file2.cfg
33575013 aa_dir.tar  33575015 aa_dir.tar.gz   16790266 bb_dir          4654 test22

[root@centos7 ~]# ll -l ./abc
总用量 28
drwxr-xr-x 3 root root      52 1月  19 15:01 aa_dir
-rw-r--r-- 1 root root   10240 1月  10 16:01 aa_dir.tar
-rw-r--r-- 1 root root    1101 1月  10 16:08 aa_dir.tar.bz2
-rw-r--r-- 1 root root    1002 1月  10 16:05 aa_dir.tar.gz
-rw-r--r-- 1 root root    1614 1月  10 16:40 aa_dir.zip
drwxr-x-wx 2 root root       6 1月   6 11:53 bb_dir
-rwxrw-r-- 1 lisi g_lisi  1440 12月 12 14:22 file2.cfg
drwxr-xr-- 3 root root      43 1月   4 14:08 test22

       理解了上面这些知识,就能理解目录的权限。目录文件的读权限(r)和写权限(w),都是针对目录文件本身。由于目录文件内只有文件名和inode号码,所以如果只有读权限,只能获取文件名,无法获取其他信息,因为其他信息都储存在inode节点中,而读取inode节点内的信息需要目录文件的执行权限(x)。

6、inode的特殊作用

    由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

      1) 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。

      2) 移动文件或重命名文件,只是改变文件名,不影响inode号码。

      3) 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

(2)block

1、block的内容

      block是真正存储数据的地方。block是文件系统中的最小存储单位,扇区是磁盘中的最小存储单位。

      操作系统读取硬盘的时候,不会一个个扇区(512字节)地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。

      "块"的大小:有1KB,即连2个扇区组成一个 block。或4K,连8个扇区组成一个 block等。

      block 的大小和数量在格式化后就已经决定,不能修改;如果修改,请重新格式化分区,记得先卸载。

2、block的大小对系统的影响

      block调大时,节约了寻址时间,速度变快,但浪费空间;

      block调小时,节约空间,但寻址时间变长,速度变慢。

      说明:为什么block调大会浪费空间?这是因为一个文件会占用多个block来存放。当前一个block放不下时,就会占用下一个block,到最后如果产生不足以占用一个完整的block时,仍然会占用一个完整的block,就会浪费这个block剩下的空间。

      如果有一个2T的硬盘,可以前1.5T使用4K的block,后0.5G使用64K的block,这样可以改善机械硬盘越到最后速度越慢的问题。用空间换时间。

3、查看block的大小以及修改

显示磁盘状态信息:CentOS6用: dumpe2fs  设备文件名 ,CentOS7用:xfs_info 设备文件名

查看某个设备的block大小

[root@centos7 ~]# xfs_info /dev/sda3
meta-data=/dev/sda3              isize=512    agcount=4, agsize=1166528 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=4666112, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

修改block的大小,CentOS7用 mkfs.xfs格式化命令,需要格式化分区,mkfs.xfs就是mkfs –t xfs的简写

 

(3)Linux支持的常见文件系统     

      Linux 系统能够支持的文件系统非常多,CentOS 6.x 默认使用 Ext4,而 CentOS 7.x 默认使用 xfs 格式。

      Linux 所能够支持的文件系统在 "/usr/src/kemels/当前系统版本/fs" 目录中(需要在安装时选择),该目录中的每个子目录都是一个可以识别的文件系统。常见的 Linux 支持的文件系统如下:

文件系统描 述
ExtLinux 中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用
Ext2是 Ext 文件系统的升级版本,Red Hat Linux 7.2 版本以前的系统默认都是 Ext2 文件系统。于 1993 年发布,支持最大 16TB 的分区和最大 2TB 的文件(1TB=1024GB=1024x1024KB)
Ext3是 Ext2 文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时提高文件系统的可靠性。支持最大 16TB 的分区和最大 2TB 的文件
Ext4是 Ext3 文件系统的升级版。Ext4 在性能、伸缩性和可靠性方面进行了大量改进。Ext4 的变化可以说是翻天覆地的,比如向下兼容 Ext3、最大 1EB 文件系统和 16TB 文件、无限数量子目录、Extents 连续数据块 概念、多块分配、延迟分配、持久预分配、快速 FSCK、日志校验、无日志模式、在线碎片整理、inode 增强、默认启用 barrier 等。它是 CentOS 6.3 的默认文件系统
xfs被业界称为最先进、最具有可升级性的文件系统技术,由 SGI 公司设计,目前最新的 CentOS 7 版本默认使用的就是此文件系统。
swapswap 是 Linux 中用于交换分区的文件系统(类似于 Windows 中的虚拟内存),当内存不够用时,使用交换分区暂时替代内存。一般大小为内存的 2 倍,但是不要超过 2GB。它是 Linux 的必需分区
NFSNFS 是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源
iso9660光盘的标准文件系统。Linux 要想使用光盘,必须支持 iso9660 文件系统
fat就是 Windows 下的 fatl6 文件系统,在 Linux 中识别为 fat
vfat就是 Windows 下的 fat32 文件系统,在 Linux 中识别为 vfat。支持最大 32GB 的分区和最大 4GB 的文件
NTFS就是 Windows 下的 NTFS 文件系统,不过 Linux 默认是不能识别 NTFS 文件系统的,如果需要识别,则需要重新编译内核才能支持。它比 fat32 文件系统更加安全,速度更快,支持最大 2TB 的分区和最大 64GB 的文件
ufsSun 公司的操作系统 Solaris 和 SunOS 所采用的文件系统
procLinux 中基于内存的虚拟文件系统,用来管理内存存储目录 /proc
sysfs和 proc —样,也是基于内存的虚拟文件系统,用来管理内存存储目录 /sysfs
tmpfs也是一种基于内存的虚拟文件系统,不过也可以使用 swap 交换分区

 

三、磁盘和文件系统管理命令

     磁盘写数据时,先从外往里。引导数据一般保存在0磁道0扇区里,系统启动时需要这个引导区里的引导数据来引导系统启动。

1、分区并格式化分区

       硬盘是用来存储数据的,通常新的硬盘要对其进行分区并格式化分区,分区就如同把一个大柜按照要求分割成几个小柜子(组合衣柜);格式化就好比在每个小柜子中打入隔断,决定每个隔断的大小和位置,然后在柜门上贴上标签,标签中写清楚每件衣服保存的隔断的位置和这件衣服的一些特性(比如衣服是谁的,衣服的颜色、大小等)。

       在格式化过程中,既清除了硬盘中的数据,又向硬盘中写入了文件系统。不同操作系统使用的文件系统并不相同,格式化的真实目的是为了写入文件系统。

2、磁盘常用管理命令

1)df 命令:查看文件系统硬盘使用情况

用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。

df 命令主要读取的数据几乎都针对的是整个文件系统,即主要是从各文件系统的 Super block (超级块)中读取数据。

基本格式为:[root@centos7 ~]# df [选项] [目录或文件名]

选项:

选项作用
-a显示所有文件系统信息,包括系统特有的 /proc、/sysfs 等文件系统;
-m以 MB 为单位显示容量;
-k以 KB 为单位显示容量,默认以 KB 为单位;
-h使用人们习惯的 KB、MB 或 GB 等单位自行显示容量;
-T显示该分区的文件系统名称;
-i不用硬盘容量显示,而是以含有 inode 的数量来显示。

实例一:df

    

 不使用任何选项的 df 命令,默认会将系统内所有的文件系统信息,以 KB 为单位显示出来。

  • Filesystem:表示该文件系统位于哪个分区,因此该列显示的是设备名称;
  • 1K-blocks:此列表示文件系统的总大小,默认以 KB 为单位;
  • Used:表示用掉的硬盘空间大小;
  • Available:表示剩余的硬盘空间大小;
  • Use%:硬盘空间使用率。如果使用率高达 90% 以上,就需要额外注意,因为容量不足,会严重影响系统的正常运行;
  • Mounted on:文件系统的挂载点,也就是硬盘挂载的目录位置。

实例二:df -hT

  

2)du 命令:统计目录或文件所占磁盘空间大小

注意:使用 “ls” 命令是可以看到文件的大小的。但是大家会发现,在使用 "ls" 命令査看目录大小时,目录的大小多数是 4KB,这是因为目录下的子目录名和子文件名是保存到父目录的 block(默认大小为 4KB)中的,如果父目录下的子目录和子文件并不多,一个 block 就能放下,那么这个父目录就只占用了一个 block 大小。

[root@centos7 ~]# ll -dh ./abc
drwxr-xr-x 5 root root 144 1月  19 11:45 ./abc

但是我们在统计目录时,不是想看父目录下的子目录名和子文件名到底占用了多少空间,而是想看父目录下的子目录和子文件的总磁盘占用量大小,这时就需要使用 du 命令才能统计目录的真正磁盘占用量大小。

基本格式为:[root@centos7 ~]# du [选项] [目录或文件名]

选项:

  • -a:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
  • -h:使用习惯单位显示磁盘占用量,如 KB、MB 或 GB 等;
  • -s:统计总磁盘占用量,而不列出子目录和子文件的磁盘占用量

实例一:

[root@centos7 ~]# du -ah ./abc
4.0K    ./abc/test22/anaconda-ks.cfg
0       ./abc/test22/test_d
4.0K    ./abc/test22
4.0K    ./abc/file2.cfg
0       ./abc/bb_dir
12K     ./abc/aa_dir.tar
4.0K    ./abc/aa_dir.tar.gz
4.0K    ./abc/aa_dir.tar.bz2
4.0K    ./abc/aa_dir.zip
0       ./abc/aa_dir/aa1_dir/a1.txt
0       ./abc/aa_dir/aa1_dir
4.0K    ./abc/aa_dir/file3.cfg
4.0K    ./abc/aa_dir/aa.txt
8.0K    ./abc/aa_dir
40K     ./abc

[root@centos7 ~]# du -h ./abc 
0       ./abc/test22/test_d
4.0K    ./abc/test22
0       ./abc/bb_dir
0       ./abc/aa_dir/aa1_dir
8.0K    ./abc/aa_dir
40K     ./abc

[root@centos7 ~]# du -sh ./abc
40K     ./abc

3)df 命令和du 命令的区别

使用 du 命令和 df 命令去统计分区的使用情况时,得到的数据是不一样的。是因为

      df 命令是从文件系统的角度考虑的,通过文件系统中未分配的空间来确定文件系统中已经分配的空间大小。也就是说,在使用 df 命令统计分区时,不仅要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)。

      du 命令是面向文件的,只会计算文件或目录占用的磁盘空间。

所以,df 命令统计的分区更准确,是真正的空闲空间。

3、给硬盘分区:fdisk命令

      在 Linux 中有专门的分区命令 fdisk 和 parted。其中 fdisk 命令较为常用,但不支持大于 2TB 的分区;如果需要支持大于 2TB 的分区,则需要使用 parted 命令,当然 parted 命令也能分配较小的分区。

      注意:千万不要在当前的硬盘上尝试使用 fdisk,这会完整删除整个系统,一定要再找一块硬盘,或者使用虚拟机。

1)使用 "fdisk -l" 查看分区信息

      查看系统中有多少块磁盘,以及每块磁盘的分区情况

[root@centos7 ~]# fdisk -l 

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa366e322

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000cc463

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648     4605951     2097152   82  Linux swap / Solaris
/dev/sda3         4605952    41934847    18664448   83  Linux

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

其上半部分态是硬盘的整体状态,包含总大小,扇区,扇区大小等,下半部分是分区的信息,共 7 列,含义如下:

  • Device:分区的设备文件名。
  • Boot:是否为启动引导分区,在这里 /dev/sda1 为启动引导分区。
  • Start:起始柱面,代表分区从哪里开始。
  • End:终止柱面,代表分区到哪里结束。
  • Blocks:分区的大小,单位是 KB。
  • id:分区内文件系统的 ID。在 fdisk 命令中,可以 使用 "i" 查看。
  • System:分区内安装的系统是什么。

这里看到 我有三个硬盘, /dev/sdc 没有进行分区。如果硬盘并没有分区,使用 fdisk 命令的目的就是建立分区。后面对 /dev/sdc 建立分区,并进行后面的格式化-挂载。

建立分区命令:fdisk 设备文件名

在 fdisk 交互界面中输入 m 可以得到帮助,帮助里列出了 fdisk 可以识别的交互命令,如下:      

命令说 明
a设置可引导标记
b编辑 bsd 磁盘标签
c设置 DOS 操作系统兼容标记
d删除一个分区
1显示已知的文件系统类型。82 为 Linux swap 分区,83 为 Linux 分区
m显示帮助菜单
n新建分区
0建立空白 DOS 分区表
P显示分区列表
q不保存退出
s新建空白 SUN 磁盘标签
t改变一个分区的系统 ID
u改变显示记录单位
V验证分区表
w保存退出
X附加功能(仅专家)

4、对硬盘分区进行格式化

      分区完成后,如果不格式化写入文件系统,则是不能正常使用的。需要使用 mkfs 或 mke2fs命令对硬盘分区进行格式化。

       mkfs 命令为硬盘分区写入文件系统时,无法手动调整分区的默认参数(比如块大小是 4096 Bytes),如果想要调整,就使用 mke2fs 命令重新格式化。如果没有特殊需要,建议使用 mkfs 命令对硬盘分区进行格式化。

1)mkfs 命令

基本格式为:[root@centos7 ~]# mkfs [-t 文件系统格式] 分区设备文件名

选项:-t 文件系统格式:用于指定格式化的文件系统,如 xfs、ext4;

    注意:mkfs.xfs 是 mkfs –t xfs的简写,mkfs.ext4 是 mkfs –t ext4的简写

2)mke2fs命令(不建议用)

基本格式为:[root@centos7 ~]#  mke2fs [选项] 分区设备文件名

选项功能
-t 文件系统指定格式化成哪个文件系统, 如 ext2、ext3、ext4;
-b 字节指定 block 的大小;
-i 字节指定"字节 inode "的比例,也就是多少字节分配一个 inode;
-j建立带有 ext3 日志功能的文件系统;
-L 卷标名给文件系统设置卷标名,就不使用 e2label 命令设定了;

5、mount 挂载命令 

     查看文章:Linux mount挂载命令

6、磁盘知识点
       工厂生产的硬盘必须经过低级格式化、分区和高级格式化三个处理步骤后,电脑才能利用它们存储数据。其中磁盘的低级格式化通常由生产厂家完成,目的是划定磁盘可供使用的扇区和磁道并标记有问题的扇区;而用户则需要使用操作系统所提供的磁盘工具如“fdisk、gdisk”等程序进行硬盘“分区”和“格式化”。磁盘两种分区表:MBR和GPT
1)MBR
     将分区信息保存到磁盘的第一个扇区(MBR扇区)的64个字节中,每个分区占用16个字节,这16个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、隐含扇区数目(4个字节)、分区总扇区数目(4个字节)等内容。
特点:
     MBR分区主分区数目不能超过4个,很多时候,4个主分区并不能满足需要。
     MBR分区方案无法支持超过2TB容量的磁盘。因为这一方案用4个字节存储分区的总扇区数,最大能表示2的32次方的扇区个数,按每扇区512字节计算,每个分区最大不能超过2TB。磁盘容量超过2TB以后,分区的起止位置也就无法表示了,BIOS将无法识别分区。(这种分区表逐渐将被淘汰,当然现在很多系统还在用)

2)GPT
     GUID Partition Table的缩写,含义“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。
     GPT的分区方案之所以比MBR更先进,是因为在GPT分区表头中可自定义分区数量的最大值,也就是说GPT分区表的大小不是固定的。在Windows中,微软设定GPT磁盘最大分区数量为128个。
特点:
     支持2TB以上的大硬盘。
     每个磁盘的分区个数几乎没有限制。操作系统存在允许的最多分区数的限制,比如win限制128个

四、给硬盘(dev/sdc)分区-格式化-挂载

主要包含这几个步骤:硬盘(这里虚拟硬盘测试 dev/sdc)- 分区 - 格式化 - 挂载 - 访问使用

(1)使用fdisk管理分区(MBR分区表)

    创建主分区、一个扩展分区和逻辑分区,其中,扩展分区不能格式化和挂载

命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

命令(输入 m 获取帮助):l

 0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris        
 1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx         
 5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据 
 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具      
 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         
 9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问       
 a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要       
16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动
1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep        
1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT            
1e  隐藏的 W95 FAT1 80  旧 Minix       

命令(输入 m 获取帮助):

1、分区

[root@centos7 ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x295491c4 创建新的 DOS 磁盘标签。

##创建主分区
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x295491c4

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   83  Linux

##创建一个扩展分区和多个逻辑分区
命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
分区号 (2-4,默认 2):
起始 扇区 (2099200-41943039,默认为 2099200):
将使用默认值 2099200
Last 扇区, +扇区 or +size{K,M,G} (2099200-41943039,默认为 41943039):+18G
分区 2 已设置为 Extended 类型,大小设为 18 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x295491c4

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   83  Linux
/dev/sdc2         2099200    39847935    18874368    5  Extended
命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (2101248-39847935,默认为 2101248):
将使用默认值 2101248
Last 扇区, +扇区 or +size{K,M,G} (2101248-39847935,默认为 39847935):+2G
分区 5 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x295491c4

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   83  Linux
/dev/sdc2         2099200    39847935    18874368    5  Extended
/dev/sdc5         2101248     6295551     2097152   83  Linux

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

    fdisk  -l   查看系统所有硬盘及分区

[root@centos7 ~]# fdisk -l 
...

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x295491c4

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   83  Linux
/dev/sdc2         2099200    39847935    18874368    5  Extended
/dev/sdc5         2101248     6295551     2097152   83  Linux

2、格式化

[root@centos7 ~]# mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@centos7 ~]# mkfs -t xfs /dev/sdc5
meta-data=/dev/sdc5              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

3、挂载

     建立挂载点并挂载

[root@centos7 ~]# mkdir /disk1
[root@centos7 ~]# mount /dev/sdc1 /disk1

4、访问使用

[root@centos7 ~]# cd /disk1
[root@centos7 disk1]# touch aa.txt
[root@centos7 disk1]# ll
总用量 0
-rw-r--r-- 1 root root 0 4月  12 20:58 aa.txt

5、删除分区,后面使用gdisk管理分区

[root@centos7 ~]# umount /dev/sdc1
[root@centos7 ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):d
分区号 (1,2,5,默认 5):1
分区 1 已删除

命令(输入 m 获取帮助):d
分区号 (2,5,默认 5):2
分区 2 已删除

命令(输入 m 获取帮助):d
No partition is defined yet!

命令(输入 m 获取帮助):p

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x295491c4

   设备 Boot      Start         End      Blocks   Id  System

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

(2)使用gdisk管理分区(MBR分区表)

查看gdisk,安装,gdisk 的使用和 fdisk类似

[root@centos7 ~]# rpm -qa | gdisk
-bash: gdisk: 未找到命令
[root@centos7 ~]# yum install -y gdisk

Command (? for help): ?
b       back up GPT data to a file
c       change a partition's name
d       delete a partition
i       show detailed information on a partition
l       list known partition types
n       add a new partition
o       create a new empty GUID partition table (GPT)
p       print the partition table
q       quit without saving changes
r       recovery and transformation options (experts only)
s       sort partitions
t       change a partition's type code
v       verify disk
w       write table to disk and exit
x       extra functionality (experts only)
?       print this menu

Command (? for help): l
0700 Microsoft basic data  0c01 Microsoft reserved    2700 Windows RE          
3000 ONIE boot             3001 ONIE config           4100 PowerPC PReP boot   
4200 Windows LDM data      4201 Windows LDM metadata  7501 IBM GPFS            
7f00 ChromeOS kernel       7f01 ChromeOS root         7f02 ChromeOS reserved   
8200 Linux swap            8300 Linux filesystem      8301 Linux reserved      
8302 Linux /home           8400 Intel Rapid Start     8e00 Linux LVM           
a500 FreeBSD disklabel     a501 FreeBSD boot          a502 FreeBSD swap        
a503 FreeBSD UFS           a504 FreeBSD ZFS           a505 FreeBSD Vinum/RAID  
a580 Midnight BSD data     a581 Midnight BSD boot     a582 Midnight BSD swap   
a583 Midnight BSD UFS      a584 Midnight BSD ZFS      a585 Midnight BSD Vinum  
a800 Apple UFS             a901 NetBSD swap           a902 NetBSD FFS          
a903 NetBSD LFS            a904 NetBSD concatenated   a905 NetBSD encrypted    
a906 NetBSD RAID           ab00 Apple boot            af00 Apple HFS/HFS+      
af01 Apple RAID            af02 Apple RAID offline    af03 Apple label         
af04 AppleTV recovery      af05 Apple Core Storage    be00 Solaris boot        
bf00 Solaris root          bf01 Solaris /usr & Mac Z  bf02 Solaris swap        
bf03 Solaris backup        bf04 Solaris /var          bf05 Solaris /home       
bf06 Solaris alternate se  bf07 Solaris Reserved 1    bf08 Solaris Reserved 2  
bf09 Solaris Reserved 3    bf0a Solaris Reserved 4    bf0b Solaris Reserved 5  
c001 HP-UX data            c002 HP-UX service         ea00 Freedesktop $BOOT   
eb00 Haiku BFS             ed00 Sony system partitio  ed01 Lenovo system partit

 1、分区

[root@centos7 ~]# gdisk /dev/sdc      
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************


Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: 2048
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +2G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 9E2ECCE9-CBEC-40F8-B406-7397ED2C38DA
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 37748669 sectors (18.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8300  Linux filesystem

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.

2、格式化 - 挂载 - 访问使用同上。

(3)swap 分区

      在安装系统的时候已经建立了 swap 分区。swap 分区通常被称为交换分区,这是一块特殊的硬盘空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。

1、查看swap分区的大小可以用 free -h命令

  free 命令主要是用来查看内存和 swap 分区的使用情况的,其中

  • total:是指总数;
  • used:是指已经使用的;
  • free:是指空闲的;
  • shared:是指共享的;
  • buffers:是指缓冲内存数;
  • cached:是指缓存内存数,单位是KB;
[root@centos7 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.8G        123M        3.5G         11M        248M        3.5G
Swap:          2.0G          0B        2.0G

2、建立新的 swap 分区,只需要执行以下几个步骤。

1)分区,这是用gdisk,swap是8200:

[root@centos7 ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): n
Partition number (2-128, default 2): 2
First sector (34-41943006, default = 4196352) or {+-}size{KMGTP}: 
Last sector (4196352-41943006, default = 41943006) or {+-}size{KMGTP}: +1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): p
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 9E2ECCE9-CBEC-40F8-B406-7397ED2C38DA
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 35651517 sectors (17.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8300  Linux filesystem
   2         4196352         6293503   1024.0 MiB  8200  Linux swap

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.

2)格式化:格式化命令稍有不同,使用 mkswap 命令把分区格式化成 swap 分区。

[root@centos7 ~]# mkswap /dev/sdc2
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=a8570808-6cef-4a72-9cb4-f762c7d120c2

3)使用 swap 分区

临时使用

[root@centos7 ~]# swapon /dev/sdc2
[root@centos7 ~]# free -h         
              total        used        free      shared  buff/cache   available
Mem:           3.8G        124M        3.5G         11M        248M        3.5G
Swap:          3.0G          0B        3.0G

永久生效使用:修改 /etc/fstab文件 (开机自启动新添加的swap分区) 。在最后追加: /dev/sdc2  swap swap defaults 0 0

 这是我就不设置了。

 

ends~

 

 

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Charge8

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值