2.磁盘分区、格式化、挂载,ext文件系统管理命令

本文详细介绍了Linux系统中磁盘分区的过程,包括MBR、使用fdisk命令创建分区,以及分区类型的更改。接着讲解了如何格式化分区,特别是ext文件系统的创建、管理和维护。此外,还讨论了文件系统的挂载、卸载操作,以及swap文件系统和/etc/fstab配置文件在系统管理中的作用。内容涵盖了从创建分区到格式化,再到文件系统管理和挂载的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.目录

1.创建分区

1.1 MBR

磁盘的最前端,即0号磁道,0号扇区(sector)称为MBR(Master Boot Record)。组成如下:

  • Bootloader
    MBR的前446字节是Bootloader,用来引导操作系统启动。
  • 分区表
    之后的64字节为分区表,每16个字节标识一个分区,所以一个磁盘最多划分为4个主分区
    若需划分4个以上的分区,可使用扩展分区。扩展分区指向磁盘中的某段空间,在这段空间中可标识各逻辑分区。逻辑分区可以像主分区一样格式化、挂载。
    不论主分区有多少,只要使用逻辑分区,它的编号都是从5开始,1-4是主分区使用的。
  • magic number
    魔数,占2字节。用来标识当前MBR是否有效。

1.2 命令fdisk

命令fdisk,用于管理磁盘分区。
选项“-l”,列出指定磁盘上的分区情况,如不指定参数则列出所有分区。

[root@localhost ~]# fdisk -l /dev/sda

Disk /dev/sda: 85.9 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00093481

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64       10444    83373056   8e  Linux LVM

其中Boot项下带“*”的表示,操作系统安装在该分区;Start表示分区的起始柱面号,End为其结束柱面号1;Blocks为分区的块数量;Id用来标识该分区的类型。

管理分区只需直接跟指定设备即可,fdisk是交互式的,使用m键可查看各功能。

[root@localhost ~]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   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)
按键意义
n创建新分区
d删除分区
t更改分区类型(即system Id)
l列出所有支持的分区类型
w保存退出
q不保存退出,即放弃本次修改
p效果同fdisk -l

1.3 实际创建、更改分区过程

1.3.1 创建分区、更改分区类型

1、在/dev/sdb创建一个3G大小的主分区:

[root@local ~]# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n                     # 新建
Command action
   e   extended
   p   primary partition (1-4)
p                                           # 指定为主分区
Partition number (1-4): 1                   # 分区编号
First cylinder (1-13054, default 1):        # 该分区的第一个柱面的编号,直接回车表示使用默认
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): +3G                                 # 指定该分区使用多少柱面,或直接指定其大小

2、其余空间分配给一个扩展分区:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e                                               # 指定为扩展分区
Partition number (1-4): 2                       # 分区编号
First cylinder (394-13054, default 394): 
Using default value 394
Last cylinder, +cylinders or +size{K,M,G} (394-13054, default 13054): 
Using default value 13054                       # 扩展分区大小默认使用所有剩余空间

3、在此扩展分区上创建一个5G大小的逻辑分区:

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l                                               # 指定创建逻辑分区。不论主分区有多少,逻辑分区的编号默认从5开始
First cylinder (394-13054, default 394): 
Using default value 394
Last cylinder, +cylinders or +size{K,M,G} (394-13054, default 13054): +5G

4、查看目前已创建的分区:

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6f7a5b9a

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         393     3156741   83  Linux
/dev/sdb2             394       13054   101699482+   5  Extended
/dev/sdb5             394        1047     5253223+  83  Linux

5、由Id可知各分区类型。现把sdb5更改为swap类型:

Command (m for help): t
Partition number (1-5): 5
Hex code (type L to list codes): 82                 # swap类型对应的编码为82
Changed system type of partition 5 to 82 (Linux swap / Solaris)

6、再次查看,保存退出:

Command (m for help): p  

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6f7a5b9a

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         393     3156741   83  Linux
/dev/sdb2             394       13054   101699482+   5  Extended
/dev/sdb5             394        1047     5253223+  82  Linux swap / Solaris

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

1.3.2 内核识别创建、更改的分区

使用命令fdisk创建分区完成,并不意味着内核已识别这些分区。文件/proc/partitions中显示的各分区,才是内核已经真正识别的分区。

如何让内核立即识别新创建的分区?
使用命令partx,其“-a”选项表示立即识别所有分区。之后再查看/proc/partitions进行验证,如执行该命令,提示系统忙,导致分区仍未被识别,则可多次执行该命令2

分区被内核识别后方可进行后续的格式化操作。

2.格式化——以ext文件系统为例

2.1 创建各文件系统的命令

格式化分区,即在磁盘分区上创建文件系统。

命令mkfs.文件系统类型,后跟对应分区。即表示把指定分区格式化为对应的文件系统类型。
所以输入“mkfs”,使用命令补全,即可看到系统支持的所有这类命令,由此也可知系统当前支持哪些文件系统类型。

[root@local ~]# mkfs
mkfs          mkfs.cramfs   mkfs.ext2     mkfs.ext3     mkfs.ext4     mkfs.ext4dev  mkfs.msdos    mkfs.vfat

这些命令也可以统一起来,使用“mkfs -t 文件系统类型”来创建指定的文件系统。

2.2 创建、管理ext文件系统

上述的命令mkfs就可以创建ext系列文件系统,不过ext系列文件系统有自己的专用的更强大的工具。

2.2.1 创建

命令mke2fs,用于创建ext系列文件系统。

  • 选项“-t”,指定要创建的文件系统类型,ext2、ext3、ext4。若不指定,默认为ext4。
  • 选项“-b”,指定文件系统的块大小(1K、2K、4K),默认是4K。
  • 选项“-L”,指定卷标。
  • 选项“-j”,表示创建有日志(journal)功能的文件系统。实际的意思是创建ext3文件系统,因为相对于ext2,ext3引入了日志功能。
  • 选项“-i”,指定每多少字节创建一个inode3
  • 选项“-N”,比“-i”好理解,该选项表示直接指定要创建的文件系统有多少个inode。
  • 选项“-m”,指定预留给管理员使用的空间4。默认比例是5%。
  • 选项“-O”,以某种特性创建文件系统。比如“has_journal”表示创建带日志的文件系统,意义同选项“-j”;使用脱字符表示取消某种特性进行创建(有的属性是默认的,不专门取消则表示启用)。更多特性详见man手册。

创建一个ext4文件系统(默认),块大小为4K(默认),卷标为sdb1的文件系统的命令即显示信息:

[root@local ~]# mke2fs -t ext4 -L sdb1 -b 4096 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=sdb1                           # 卷标
OS type: Linux                                  # 分区类型
Block size=4096 (log=2)                         # 块大小
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
197600 inodes, 789185 blocks                    # inode数量,块数量
39459 blocks (5.00%) reserved for the super user    # 供管理员使用的保留空间
First data block=0
Maximum filesystem blocks=809500672
25 block groups                                 # 包含25个块组
32768 blocks per group, 32768 fragments per group
7904 inodes per group                           # 每个块组inode数量,块数量
Superblock backups stored on blocks:            # 超级块备份信息存储在哪些块 
    32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

2.2.2 修改

命令e2label,显示、修改ext文件系统卷标。
接上例,显示、修改设备/dev/sdb1的卷标:

[root@local ~]# e2label /dev/sdb1              # 显示
sdb1
[root@local ~]# e2label /dev/sdb1 mydata       # 修改为mydata
[root@local ~]# e2label /dev/sdb1
mydata

命令tune2fs,修改一个ext文件系统的可调整的属性5。其各选项可类比命令mke2fs。

  • 选项“-l”,显示指定文件系统superblock的信息。
  • 选项“-j”,ext2文件系统升级到ext3,不会影响其中的数据。
  • 选项“-L”,修改卷标。
  • 选项“-m”,调整预留给管理员的空间的百分比。
  • 选项“-O”,同mke2fs的“-O”,表示开启或关闭文件系统的某种特性(特性前加脱字符表示关闭)。超级块信息中的features即为文件系统当前开启的特性,其意义可在man手册中查看。

    [root@local ~]# tune2fs -l /dev/sdb1 | grep features
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
  • 选项“-o”,开启或关闭某种默认挂载选项(在挂载选项前加脱字符表示关闭)。超级块信息中的mount options的内容即为文件系统的默认挂载选项。

    [root@local ~]# tune2fs -l /dev/sdb1 | grep "mount options"
    Default mount options:    (none)

    若后跟acl,可用于调整文件系统上的文件是否支持访问控制列表等等:

    [root@local ~]# tune2fs -o acl /dev/sdb1
    tune2fs 1.41.12 (17-May-2010)
    [root@local ~]# tune2fs -l /dev/sdb1 | grep "mount options"
    Default mount options:    acl

    其他挂载选项可在man手册查看。

2.2.3 检查修复

命令fsck,用于检查、修复文件系统6。这个命令是通用的,并非ext文件系统专有的命令。

  • 选项“-t”,因为是通用的,所以要指明文件系统类型。
  • 选项“-a”,无需与用户交互,自动修复所有文件系统。
    这个选项看上去很方便,但效果未必好。比如一个文件快写完时,正好断电了。再次开机如果都修复的话,系统会把未完成的文件都删除(包括已经写过的部分),其实文件系统修复的意思就是把未完成的文件删除。这样对于一个本来快写完的文件,反而增加了更多麻烦。

命令e2fsck,则是ext文件系统专用的文件系统检测修复命令。

  • 选项“-y”,对所有问题都使用yes。
  • 选项“-f”,即使文件系统没有问题,也进行检测7

命令blkid,查看设备属性,后直接跟设备名即可。

[root@local ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="mydata" UUID="fb73508b-afbe-48a6-bb6f-b9cd866e37ff" TYPE="ext4"

实际上,引用一个设备,既可以使用其设备文件,也可使用LABEL或UUID。

  • 选项“-L”,表示根据指定的卷标,查找该卷标对应的设备。

    [root@local ~]# blkid -L mydata
    /dev/sdb1
  • 选项“-U”,根据UUID,查找该UUID对应的设备

3.文件系统挂载、卸载

一个格式化之后的设备,若要被访问,必须与系统上的某个存在的目录关联起来。关联过程称为挂载,这个目录称为挂载点

作为挂载点的目录下如果本来有文件,那么作为挂载点后这些文件会被隐藏8

命令mount,用于挂载一个文件系统。
不加任何选项和参数,可显示当前系统所有已挂载的文件系统:

[root@local ~]# mount 
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

以第一行为例,表示设备/dev/sda3挂载到了根目录,文件系统类型为ext4,挂载选项为读写。

当该命令后跟设备文件9和挂载点时,即可起到挂载的作用:

[root@local ~]# mkdir /mydata 
[root@local ~]# mount /dev/sdb1 /mydata
[root@local ~]# mount | grep sdb1
/dev/sdb1 on /mydata type ext4 (rw)

各选项:

  • 选项“-a”,表示立即根据/etc/fstab中的内容进行挂载,对其中已经挂载的文件系统没有影响。
  • 选项“-r”,表示进行只读挂载。挂载后的文件系统只能读,不能写。比如光盘就只能进行只读挂载,其他设备可根据需要而定。
  • 选项“-w”,表示进行读写挂载。默认的挂载就是读写挂载。
  • 选项“-n”,默认情况下,挂载与卸载文件系统的信息,会在/etc/mtab中显示10。选项“-n”表示挂载时不写入/etc/mtab中。
  • 选项“-o”,挂载时可设置挂载特性,在选项“-o”后跟对应特性即可。
    常用特性如下:

    名称意义
    sync/async用于指定挂载的文件系统,在有进程访问它时,采用同步写入还是异步写入11
    atime/noatime用于指定挂载的文件系统,在其上的文件被访问时是否立即更新atime12
    diratime/nodirtime类似地,指定挂载的文件系统,在其上的目录被访问时是否立即更新atime。目录atime意义不大,一般可关闭。
    remount用于重新挂载文件系统,而不用先卸载,再挂载。
    acl/noacl用于指定挂载的文件系统,在其上创建的文件支持acl,默认不支持。13
    -ro、-rw同命令mount的-r、-w选项
    dev/nodev指定挂载的文件系统上,是否允许创建设备文件
    exec/noexec指定挂载的文件系统上,是否允许运行程序。一个未确定是否安全的设备,最好令其以不能运行程序的方式挂载。
    suid/nosuid指定是否允许挂载的文件系统上,SUID、SGID权限生效。
    defaults使用特性rw, suid, dev, exec, auto, nouser, async, relatime
  • 选项“-o loop”,把这个区分于上述特性单独列出。它用于挂载本地回环设备。多用于把光盘镜像文件(.ISO、.img等)作为回环设备,这样就可以把某一目录当做入口(即挂载点),访问镜像文件中的内容,而非一定要把镜像刻成光盘。
  • 选项“–bind”,用于把一个目录“挂载”到另一个目录。这样同样的内容可在两个路径访问。设备关联至目录,此时变为目录关联至目录。效果看上去像链接文件,但实现机制肯定与链接不一样。

4.swap文件系统

由于内存大小有限,硬盘上应划分空间作为交换分区,当内存占用过多时,可由交换分区周转。交换分区大小一般是实际内存大小的1.5倍。

windows的交换分区用的是C盘;而linux上的交换分区,必须使用独立的文件系统(磁盘分区)。

命令mkswap,用于创建swap分区。

  • 选项“-L”,指明卷标

接上例,设备/dev/sdb5的system ID是82,所以可在其上创建交换分区:

[root@local ~]# mkswap -L "my swap" /dev/sdb5
Setting up swapspace version 1, size = 5253216 KiB
LABEL=my swap, UUID=6c6b3fdf-d58f-47eb-b07b-138f5e556d02

创建完成后,可通过命令swaponswapoff开启或禁用指定的交换分区。参数还是设备文件名、卷标或UUID。
接上例:

[root@local ~]# swapon /dev/sdb5                   # 启用
[root@local ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          980M       334M       645M       1.1M        28M       117M
-/+ buffers/cache:       189M       791M
Swap:         6.5G         0B       6.5G
[root@local ~]# swapoff -L "my swap"               # 禁用            
[root@local ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          980M       331M       649M       1.1M        28M       117M
-/+ buffers/cache:       185M       794M
Swap:         1.5G         0B       1.5G

5./etc/fstab

除根文件系统外,其他文件系统都是不会开机自动挂载的。相关内容可在配置文件/etc/fstab中定义,开机后系统会根据该文件内容,把文件中列出的文件系统挂在到指定目录。

[root@local ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Nov  8 21:20:20 2016
#
# 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=7557f8bf-fd80-430e-b271-62bcf0ca615d /                       ext4    defaults        1 1
UUID=8ae82228-5875-4476-a9f2-d0d016a19a50 /boot                   ext4    defaults        1 2
UUID=67dc4e25-3f6e-474c-9a7d-c4dd6f93e574 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

每行记录一个文件系统的挂载信息,共6字段。

各字段意义:

  • 设备
    设备文件、卷标、UUID均可引用设备。
  • 挂载点
    注意swap类型的文件系统挂载点是swap。
  • 文件系统类型
  • 使用的挂载特性
    若有多个,使用逗号隔开。
  • 转储(备份)频率
    0表示从不备份,1表示每天备份一次,2表示每隔1天备份一次等
  • 自检次序
    定义这些文件系统,开机后的自检次序。
    0表示不自检,1表示首先自检,通常首先自检的只能是根文件系统。2表示第二个自检等等。
    多个文件系统可同时自检,比如a文件系统和b文件系统都是第2个自检。不过这只会降低效率,效果不如逐个自检。

(完)


  1. 在centos7之后,这里分别显示的是开始扇区号和结束扇区号。
  2. centos 5可使用命令partprobe。
  3. inode和存储数据的block要有一个合适的比例。
    如果inode过多,则可能出现block用完时,inode还有很多,这些inode所占的空间就会浪费;如果inode过少,则文件系统上能够创建的文件数量就很少,inode用完时剩余的block就会浪费。
  4. 一个文件系统创建时,系统会预留一段空间,以便于该分区其他空间被占满时,管理员仍可利用预留的空间进行某些必要的操作。
  5. 显然,一个已经创建的文件系统,某些属性就不能再进行变动,如块大小等。
  6. 为什么要进行文件系统检查、修复?
    进程意外终止、系统崩溃等原因导致写入操作非正常终止时,可能会造成文件损坏,此时应该检测并修复文件系统。建议离线进行(即不要在挂载、或有用户正在访问的情况下检查,如有用户可以先踢掉)。
  7. 由此选项可看出,在对文件系统检查、修复前,系统是知道它是否已损坏的,应该是通过文件系统日志吧。
  8. 这些文件当然还在磁盘上,只不过无法通过操作系统访问到了。
  9. /dev/hd[a-d]#是红帽5上标识IDE设备的设备文件,序号依插槽而定;其他硬盘、U盘是/dev/sd[a-p]#,序号依系统识别各设备次序而定。
    红帽6以后,所有硬盘、U盘设备文件都是/dev/sd[a-p]#,序号依系统识别各设备次序而定。
    光盘设备一般为/dev/cdrom,/dev/dvd。
  10. 命令mount不加任何选项直接使用,显示的结果正是与/etc/mtab中的内容一致。
    这也正是查看当前系统上已挂载的文件系统的两种方式。
  11. 进程要写入的内容,先到内存,再到磁盘。
    同步写入:内存中的数据即时写入磁盘。
    异步写入:内存中的数据暂存在内存,不立即写入磁盘。
    异步写入的性能要优于同步写入,因为磁盘速度相对内存速度慢得多。
  12. 显然,对于一个文件系统上的文件被频繁访问的场景,不立即更新文件atime,可有效提高性能。如web服务器等。
  13. 一个不支持acl的文件系统,可令其重新挂载时支持acl。使用“mount -o remount,acl”即可。
    该特性也可由命令tune2fs中的“-o”选项进行调整。不过“tune2fs -o”和“mount -o”所能调整的其他功能则并不相同。而且前者调整的文件系统挂载选项会显示在超级块信息中的“mount options”;后者调整的挂载特性会显示在命令mount结果中每行末尾的括号内。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值