51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Linux中磁盘管理之格式化、分区、挂载

一、磁盘分区 {#heading-1}

在Linux下,磁盘格式化、分区和挂载的详细步骤如下所示:

1.确定磁盘设备 {#heading-2}

使用以下命令来查看可用磁盘设备:

/ # fdisk -l
Disk /dev/mmcblk1: 7456 MB, 7818182656 bytes, 15269888 sectors
238592 cylinders, 4 heads, 16 sectors/track
Units: sectors of 1 * 512 = 512 bytes

Disk /dev/mmcblk1 doesn't contain a valid partition table
Disk /dev/mmcblk1boot0: 4 MB, 4194304 bytes, 8192 sectors
128 cylinders, 4 heads, 16 sectors/track
Units: sectors of 1 \* 512 = 512 bytes


Disk /dev/mmcblk1boot0 doesn't contain a valid partition table
Disk /dev/mmcblk1boot1: 4 MB, 4194304 bytes, 8192 sectors
128 cylinders, 4 heads, 16 sectors/track
Units: sectors of 1 \* 512 = 512 bytes


Disk /dev/mmcblk1boot1 doesn't contain a valid partition table
Disk /dev/mmcblk0: 15 GB, 15931539456 bytes, 31116288 sectors
486192 cylinders, 4 heads, 16 sectors/track
Units: sectors of 1 \* 512 = 512 bytes

`Device       Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/mmcblk0p1 *  0,32,33     8,73,1            2048     133119     131072 64.0M  c Win95 FAT32 (LBA)
/dev/mmcblk0p2    8,73,2      912,229,21      133120   31116287   30983168 14.7G 83 Linux
`

从上面可以得出:

/dev/mmcblk1:容量为7456 MB的磁盘。238592柱面,4个磁头,每个磁道16个扇区。磁盘上没有有效的分区表。

/dev/mmcblk1boot0和/dev/mmcblk1boot1是磁盘的引导区,大小为4 MB,但它们没有有效的分区表。

/dev/mmcblk0:容量为15 GB的磁盘。486192柱面,4个磁头,每个磁道16个扇区。包含两个分区:

  • /dev/mmcblk0p1是引导分区,大小为64.0M,使用Win95 FAT32(LBA)文件系统。

  • /dev/mmcblk0p2是第二个分区,大小为14.7G,使用Linux文件系统(ID为83)。

2.使用fdisk命令对磁盘进行分区 {#heading-3}

/ # fdisk /dev/mmcblk1

The number of cylinders for this disk is set to 238592.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:




1. software that runs at boot time (e.g., old versions of LILO)


2. booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)


`Command (m for help):
`

此时命令栏提示输入'm',可以看到有如下参数:

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
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)
`Command (m for help):
`

各指令含义如下:

  • a: 切换引导标志(toggle a bootable flag)

  • b: 编辑BSD磁盘标签(edit bsd disklabel)

  • c: 切换DOS兼容性标志(toggle the dos compatibility flag)

  • d: 删除分区(delete a partition)

  • l: 列出已知的分区类型(list known partition types)

  • n: 添加新分区(add a new partition)

  • o: 创建一个新的空DOS分区表(create a new empty DOS partition table)

  • p: 打印分区表(print the partition table)

  • q: 退出而不保存更改(quit without saving changes)

  • s: 创建一个新的空Sun磁盘标签(create a new empty Sun disklabel)

  • t: 更改分区的系统ID(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)) 继续往下,进行创建分区操作:

    Command (m for help): n Partition type p primary partition (1-4) e extended p Partition number (1-4): 1 First sector (16-15269887, default 16): Using default value 16 Last sector or +size{,K,M,G,T} (16-15269887, default 15269887): +32M

    Command (m for help): n Partition type p primary partition (1-4) e extended

    p Partition number (1-4): 2 First sector (65552-15269887, default 65552): Using default value 65552 Last sector or +size{,K,M,G,T} (65552-15269887, default 15269887): Using default value 15269887

    Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): c Changed system type of partition 1 to c (Win95 FAT32 (LBA))

    Command (m for help): a Partition number (1-4): 1

    Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table [ 1334.059435] mmcblk1: p1 p2


以下是对上面输入命令的详细解释:

使用命令'n'创建一个新的分区:

  • 选择主分区(primary partition)类型,输入'p'。

  • 输入分区号,这里选择1。

  • 输入起始扇区,默认为16,可以直接按回车键使用默认值。

  • 输入结束扇区或者分区大小,这里输入'+32M'表示分区大小为32MB。

使用命令'n'再次创建一个新的分区:

  • 选择主分区(primary partition)类型,输入'p'。

  • 输入分区号,这里选择2。

  • 输入起始扇区,默认为65552,可以直接按回车键使用默认值。

  • 输入结束扇区或者分区大小,这里使用默认值15269887。

使用命令't'设置分区类型:

  • 输入要设置类型的分区号,这里选择1。

  • 输入十六进制代码(Hex code),这里输入'c'表示将分区1的系统类型设置为Win95 FAT32(LBA)。

使用命令'a'设置引导标志:

  • 输入要设置引导标志的分区号,这里选择1。

使用命令'w'保存更改并退出:

  • 确认分区表已经被修改,并且调用ioctl()重新读取分区表。

  • 提示分区表已经被修改,并成功保存更改。

最后,磁盘分区表将被修改,分区1被设置为Win95 FAT32(LBA)类型,并且设置为引导分区。

请注意,这些操作可能会对磁盘上的数据产生影响,请确保在进行此类操作之前备份重要数据。

二、磁盘格式化 {#heading-4}

磁盘格式化是指在磁盘上创建文件系统以准备存储数据的过程。通过格式化,磁盘将被分区划分为逻辑块,并创建用于存储和组织文件的文件系统结构。格式化磁盘将清除磁盘上的所有数据,并为其提供一个干净的文件系统环境,使其可以开始存储新的数据。 这里,我们将上面的两个分区分别格式化为Fat32格式的文件系统和ext4格式的文件系统

  • 将'/dev/mmcblk1p1'格式化为Fat32格式的文件系统

  • 将'/dev/mmcblk1p2'格式化为ext4格式的文件系统

Fat32格式,使用命令如下:

mkfs.vfat -F 32 -n "boot" /dev/mmcblk1p1

每个选项的含义解释如下:

  • -F 32:指定创建的文件系统类型为FAT32。

  • -n MyVolume:设置卷标为"MyVolume",该卷标将作为文件系统的名称显示。

  • /dev/mmcblk1p1:是要格式化的设备或分区

ext4格式,使用命令如下:

mkfs.ext4 -F -L "rootfs" /dev/mmcblk1p2
-/bin/sh: mkfs.ext4: not found

每个选项的含义解释如下:

  • -F:强制进行格式化,即使设备已经被挂载。

  • -L "rootfs":设置文件系统的标签为"rootfs",该标签将作为文件系统的名称显示。

  • /dev/mmcblk1p2:要格式化的设备或分区。

这里我们的文件系统不支持mkfs.ext4格式,但是可以使用它的孪生兄弟"mke2fs",指令如下:

mke2fs -F -L "rootfs" /dev/mmcblk1p2
`Filesystem label=rootfs
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
475136 inodes, 1900542 blocks
95027 blocks (5%) reserved for the super user
First data block=0
Maximum filesystem blocks=4194304
58 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
/ #
`

现在我们已经将上面的两个分区格式化完成了,下一步就是挂载分区。

三、磁盘挂载 {#heading-5}

1.创建挂载点 {#heading-6}

首先,您需要选择一个目录作为挂载点。可以使用mkdir命令创建一个空目录作为挂载点,例如:

mkdir /mnt/boot

2.执行挂载命令 {#heading-7}

使用mount命令将文件系统挂载到指定的挂载点上,例如:

mount /dev/mmcblk1p1 /mnt/boot

使用"df"指令查看是否挂载成功,命令如下:

/ # df -a
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root             15141732    161948  14188824   1% /
devtmpfs                216388         0    216388   0% /dev
proc                         0         0         0   0% /proc
tmpfs                   249668         0    249668   0% /tmp
sysfs                        0         0         0   0% /sys
devpts                       0         0         0   0% /dev/pts
/dev/mmcblk1p1           32260         1     32260   0% /mnt/boot

很明显已经'/dev/mmcblk1p1'分区已经成功挂载到'/mnt/boot'目录下。

3.访问文件系统 {#heading-8}

现在,可以通过挂载点来访问和操作文件系统中的文件和目录。

例如,您可以使用cd命令进入挂载点,并使用其他文件操作命令进行文件的读取、写入等操作:

cd /mnt/boot
touch test.txt

然后掉电重启开发板,再次查看'/mnt/boot'下是否有test.txt文件:

/ # ls /mnt/boot/
/ # 

很明显是没有test.txt文件,磁盘的'/dev/mmcblk1p1'分区未进行挂载到'/mnt/boot'目录下,因此在'/mnt/boot'下是看不到test.txt文件的。

/ # df -a
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root             15141732    161948  14188824   1% /
devtmpfs                216388         0    216388   0% /dev
proc                         0         0         0   0% /proc
tmpfs                   249668         0    249668   0% /tmp
sysfs                        0         0         0   0% /sys
devpts                       0         0         0   0% /dev/pts

test.txt文件是保存在磁盘的'/dev/mmcblk1p1'分区,掉电后需要手动挂载到'/mnt/boot'该目录下,才能查看到test.txt文件,如下:

/ # mount /dev/mmcblk1p1 /mnt/boot
[  179.885442] FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
`/ # ls /mnt/boot/
test.txt
/ #
`

另一个分区挂载如下:

mkdir /mnt/rootfs
mount /dev/mmcblk1p2 /mnt/rootfs
/ # df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                14.4G    158.2M     13.5G   1% /
devtmpfs                211.3M         0    211.3M   0% /dev
tmpfs                   243.8M         0    243.8M   0% /tmp
/dev/mmcblk1p1           31.5M       512     31.5M   0% /mnt/boot
/dev/mmcblk1p2            7.1G     20.0K      6.8G   0% /mnt/rootfs

四、开机自动挂载 {#heading-9}

1.设备路径挂载 {#heading-10}

如果希望在系统启动时自动挂载分区,可以编辑/etc/fstab文件并添加相应的条目。例如:

#<file system>  <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
tmpfs           /tmp            tmpfs   defaults        0       0
sysfs           /sys            sysfs   defaults        0       0
/dev/mmcblk1p1  /mnt/boot       vfat    defaults        0       0
/dev/mmcblk1p2  /mnt/rootfs     ext4    defaults        0       0

重新启动开发板,使用'df'命令查看是否自动挂载

/ # df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                14.4G    158.2M     13.5G   1% /
devtmpfs                211.3M         0    211.3M   0% /dev
tmpfs                   243.8M         0    243.8M   0% /tmp
/dev/mmcblk1p1           31.5M       512     31.5M   0% /mnt/boot
/dev/mmcblk1p2            7.1G     20.0K      6.8G   0% /mnt/rootfs

ok,自动挂载成功。

2.UUID挂载 {#heading-11}

另一种挂载方法,这里在教大家使用UUID来进行自动挂载,如下:

获取分区的UUID:使用以下命令各分区的UUID:

/ # blkid 
/dev/mmcblk0p2: LABEL="rootfs" UUID="4bdc82c7-5e83-4992-9966-cd99a2317944" TYPE="ext4"
/dev/mmcblk0p1: LABEL="boot" UUID="DF8D-2A71" TYPE="vfat"
/dev/mmcblk1p2: LABEL="rootfs" UUID="54b75bd6-7cdf-4e80-aa48-1af163bf61f3" TYPE="ext2"
/dev/mmcblk1p1: TYPE="vfat"

编辑/etc/fstab文件并添加相应的条目。例如:

#<file system>  <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
tmpfs           /tmp            tmpfs   defaults        0       0
sysfs           /sys            sysfs   defaults        0       0
UUID=54b75bd6-7cdf-4e80-aa48-1af163bf61f3   /mnt/rootfs ext4 defaults 0 0

保存后,重启开发板,成功自动挂载,如下:

/ # df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                14.4G    158.2M     13.5G   1% /
devtmpfs                211.3M         0    211.3M   0% /dev
tmpfs                   243.8M         0    243.8M   0% /tmp
/dev/mmcblk1p2            7.1G     20.0K      6.8G   0% /mnt/rootfs

在挂载文件系统时,您可以使用设备路径(如 /dev/mmcblk1p1)或文件系统的UUID来标识要挂载的分区。这两种方法各有一些区别和好处:

1.设备路径 (/dev/mmcblk1p1): {#heading-12}

  • 标识分区的路径:使用设备路径是一种直接而简单的方法来标识要挂载的分区。它基于设备文件的物理路径,可以明确地指定要挂载的分区。例如,'/dev/mmcblk1p1' 表示第二个MMC类型的磁盘的第一个分区。

  • 相对容易记忆:设备路径通常较短且易于记忆,因为它们直接与设备文件的名称相关。

但是,设备路径可能会受到设备插入和拔出的影响。如果您的系统中存在多个磁盘或设备连接状态发生变化,设备路径可能会改变。

2.文件系统UUID: {#heading-13}

  • 标识分区的唯一性:每个文件系统都有一个唯一的UUID(通用唯一标识符),用于识别分区。UUID是在创建文件系统时生成的,并且是全局唯一的。它不受设备连接状态的影响,因此即使设备路径发生变化,UUID仍将保持不变。

  • 稳定性和持久性:使用UUID来挂载分区可以提供更稳定和持久的挂载方式,因为即使重新启动系统或更改设备连接状态,UUID标识的分区仍然可以准确地被找到。

  • 更适合自动化和脚本:使用UUID可以更方便地进行自动化操作和脚本编写,因为UUID提供了一个固定的标识符来唯一标识特定的分区。


赞(1)
未经允许不得转载:工具盒子 » Linux中磁盘管理之格式化、分区、挂载