普通分区ubifs挂载

上一次中,我们制作了jffs2文件系统,实现了普通分区jffs2的挂载,这一次,我们同样实现了ubifs文件系统的挂载,可以来尝试一下ubifs下普通分区的挂载。

Nandflash分区情况

MTD设备分区情况

~ >: cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00100000 00020000 "mtdblock0 u-boot 1MB"
mtd1: 00f00000 00020000 "mtdblock1 kernel 15MB"
mtd2: 02800000 00020000 "mtdblock2 rootfs 40MB"
mtd3: 05000000 00020000 "mtdblock3 apps 80MB"
mtd4: 05000000 00020000 "mtdblock4 data 80MB"
mtd5: 02800000 00020000 "mtdblock5 backup 40MB"

linux内核分区

~ >: cat /proc/partitions
major minor  #blocks  name

  31        0       1024 mtdblock0
  31        1      15360 mtdblock1
  31        2      40960 mtdblock2
  31        3      81920 mtdblock3
  31        4      81920 mtdblock4
  31        5      40960 mtdblock5

分区对应的块设备

~ >:  ls -l /dev/mtdblock*
brw-rw----    1 root     root       31,   0 Jan  1 00:00 /dev/mtdblock0
brw-rw----    1 root     root       31,   1 Jan  1 00:00 /dev/mtdblock1
brw-rw----    1 root     root       31,   2 Jan  1 00:00 /dev/mtdblock2
brw-rw----    1 root     root       31,   3 Jan  1 00:00 /dev/mtdblock3
brw-rw----    1 root     root       31,   4 Jan  1 00:00 /dev/mtdblock4
brw-rw----    1 root     root       31,   5 Jan  1 00:00 /dev/mtdblock5

建立UBI卷

以mtdblock3为例,以ubifs文件格式挂载到/apps挂载点上

擦除对应分区

~ >: flash_eraseall /dev/mtd3
Erasing 128 Kibyte @ 5000000 - 100% complete.

当前设备

~ >: ls /dev/ubi*
/dev/ubi0      /dev/ubi0_0    /dev/ubi_ctrl
~ >: ubiattach
BusyBox v1.27.1 (2018-04-03 02:25:34 PDT) multi-call binary.

Usage: ubiattach -m MTD_NUM [-d UBI_NUM] [-O VID_HDR_OFF] UBI_CTRL_DEV

Attach MTD device to UBI

        -m MTD_NUM      MTD device number to attach
        -d UBI_NUM      UBI device number to assign
        -O VID_HDR_OFF  VID header offset
~ >: 

建立关联

~ >: ubiattach -m 3 -d 3 /dev/ubi_ctrl
UBI: attaching mtd3 to ubi3
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: empty MTD device detected
UBI: max. sequence number:       0
UBI: create volume table (copy #1)
UBI: create volume table (copy #2)
UBI: attached mtd3 to ubi3
UBI: MTD device name:            "mtdblock3 apps 80MB"
UBI: MTD device size:            80 MiB
UBI: number of good PEBs:        640
UBI: number of bad PEBs:         0
UBI: number of corrupted PEBs:   0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     0
UBI: available PEBs:             630
UBI: total number of reserved PEBs: 10
UBI: number of PEBs reserved for bad PEB handling: 6
UBI: max/mean erase counter: 0/0
UBI: image sequence number:  759054630
UBI: background thread "ubi_bgt3d" started, PID 972
~ >:  ls /dev/ubi*
/dev/ubi0      /dev/ubi0_0    /dev/ubi3      /dev/ubi_ctrl
~ >:

建立UBI卷

~ >: ubimkvol -m -n 0 -N apps /dev/ubi3 
~ >: ls /dev/ubi*
/dev/ubi0      /dev/ubi0_0    /dev/ubi3      /dev/ubi3_0    /dev/ubi_ctrl
~ >: ubimkvol
BusyBox v1.27.1 (2018-04-03 02:25:34 PDT) multi-call binary.

Usage: ubimkvol -N NAME [-s SIZE | -m] UBI_DEVICE

Create UBI volume

        -a ALIGNMENT    Volume alignment (default 1)
        -m              Set volume size to maximum available
        -n VOLID        Volume ID. If not specified,
                        assigned automatically
        -N NAME         Volume name
        -s SIZE         Size in bytes
        -t TYPE         Volume type (static|dynamic)
~ >: 

文件系统挂载

挂载ubi3(即mtdblock3)到/apps挂载点上

~ >: mount -t ubifs -o sync,noatime,rw ubi3:apps /apps/
UBIFS: default file-system created
UBIFS: mounted UBI device 3, volume 0, name "apps"
UBIFS: file system size:   80123904 bytes (78246 KiB, 76 MiB, 621 LEBs)
UBIFS: journal size:       3999744 bytes (3906 KiB, 3 MiB, 31 LEBs)
UBIFS: media format:       w4/r0 (latest is w4/r0)
UBIFS: default compressor: lzo
UBIFS: reserved for root:  3784449 bytes (3695 KiB)
~ >: mount
rootfs on / type rootfs (rw)
ubi0:rootfs on / type ubifs (rw,relatime)
proc on /proc type proc (rw,relatime)
usbfs on /proc/bus/usb type usbfs (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime)
ramfs on /tmp type ramfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
ubi3:apps on /apps type ubifs (rw,sync,noatime)

卸载和重挂载

卸载解除关联

~ >: umount /apps/
UBIFS: un-mount UBI device 3, volume 0
~ >: ubidetach -d 3 /dev/ubi_ctrl
UBI: mtd3 is detached from ubi3
~ >:  ls /dev/ubi*
/dev/ubi0      /dev/ubi0_0    /dev/ubi_ctrl

重新建立关系

~ >: ubiattach -m 3 -d 3 /dev/ubi_ctrl
UBI: attaching mtd3 to ubi3
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: max. sequence number:       12
UBI: attached mtd3 to ubi3
UBI: MTD device name:            "mtdblock3 apps 80MB"
UBI: MTD device size:            80 MiB
UBI: number of good PEBs:        640
UBI: number of bad PEBs:         0
UBI: number of corrupted PEBs:   0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             0
UBI: total number of reserved PEBs: 640
UBI: number of PEBs reserved for bad PEB handling: 6
UBI: max/mean erase counter: 2/1
UBI: image sequence number:  759054630
UBI: background thread "ubi_bgt3d" started, PID 992
~ >: ls /dev/ubi*
/dev/ubi0      /dev/ubi0_0    /dev/ubi3      /dev/ubi3_0    /dev/ubi_ctrl

再次关联问题

~ >: ubimkvol -m -n 0 -N apps /dev/ubi3
ubimkvol: UBI_IOCMKVOL: Invalid argument

当再次关联ubi3到mtd3下的时候,发现再次建立UBI卷出错。这也意味着,如果之前已经用ubimkvol建立UBI卷的分区再次挂载时不需要在执行该命令,也就是ubimkvol针对一个分区只能做一次,除非使用flash_eraseall重新格式化。

<think>好的,用户现在问的是“挂载分区有什么区别”。之前他们已经问过如何在嵌入式Linux上挂载分区新SSD,所以我之前已经详细介绍了步骤。现在他们可能对这两个概念有些混淆,需要明确区分两者的定义和用途。 首先,我需要回忆之前给出的回答,确保现在解释时保持一致。分区是创建独立的存储区域,而挂载是将这些分区连接到文件系统树的过程。用户可能在实际操作中遇到问题,比如分完区后不知道如何访问,或者挂载时找不到设备,所以需要明确两者的不同阶段。 接下来,我需要考虑用户的背景。他们可能在使用嵌入式系统,对Linux基础概念可能不太熟悉,尤其是存储管理部分。因此,解释时需要简单明了,避免使用过多专业术语,但又要准确。 可能用户的问题来源于实际操作中的困惑,比如分完区后没挂载,导致无法使用空间。或者他们想了解为什么需要两个步骤,而不仅仅是格式化硬盘。这时候需要举例说明,比如分区相当于划分房间,挂载相当于给房间装门,这样用户更容易理解。 还需要检查是否有其他潜在疑问。比如,是否每个分区都需要挂载挂载点有什么要求?或者是否可以在不分区的情况下直接挂载整个磁盘?这些可能在用户的问题背后,需要简要提及但不过于深入,以免让回答变得冗长。 另外,用户可能关心实际应用中的例子,比如如何选择文件系统,挂载选项的影响等,但当前问题集中在区别上,所以需要紧扣主题,避免偏离。但可以适当提到格式化是中间步骤,连接分区挂载,这样逻辑更清晰。 最后,确保回答结构清晰,分点说明,使用比喻帮助理解,并总结对比表格,方便用户快速比较。同时,要提醒用户在实际操作中的典型流程,帮助他们将理论应用到实践中。</think>在嵌入式Linux系统中,**分区(Partitioning)** 和 **挂载(Mounting)** 是两个不同但紧密关联的操作步骤,具体区别如下: --- ### **1. 分区(Partitioning)** #### **定义** 将物理存储设备(如SSD、SD卡)**划分为逻辑上的独立区域**,每个分区可以单独管理(如格式化、挂载)。 #### **核心作用** - **物理存储的逻辑划分**:将整块磁盘划分为多个独立区域,每个分区可视为“虚拟磁盘”。 - **多系统共存**:例如,嵌入式设备中一个分区存放Linux系统,另一个存放用户数据。 - **隔离风险**:系统分区损坏时,用户数据分区仍可保留。 #### **技术特点** - 通过工具(如`fdisk`、`parted`)操作分区表(MBR/GPT)。 - 分区后需**格式化**才能存储数据。 - 分区信息记录在磁盘的**元数据区域**(如MBR或GPT头)。 #### **嵌入式场景示例** 将SSD划分为: - `/dev/sda1`:存放根文件系统(`ext4`) - `/dev/sda2`:存放日志或用户数据(`jffs2`) --- ### **2. 挂载(Mounting)** #### **定义** 将已格式化的分区**关联到文件系统目录树**的某个路径(挂载点),使分区内容可通过该路径访问。 #### **核心作用** - **文件系统整合**:将分散的分区整合为统一的目录结构(如`/mnt/ssd`)。 - **动态资源管理**:可随时挂载/卸载存储设备(如U盘、网络存储)。 - **透明访问**:用户无需关心数据实际存储位置。 #### **技术特点** - 通过`mount`命令或`/etc/fstab`配置文件实现。 - 挂载需指定**文件系统类型**(如`ext4`、`vfat`)。 - 挂载后,分区内容**覆盖挂载点目录**原有内容(卸载后恢复)。 #### **嵌入式场景示例** ```bash # 将分区挂载到/mnt/data mount -t ext4 /dev/sda2 /mnt/data ``` --- ### **3. 关键区别对比** | **特性** | **分区** | **挂载** | |------------------|----------------------------|------------------------------| | **操作对象** | 物理磁盘(如`/dev/sda`) | 已格式化的分区(如`/dev/sda1`)| | **目的** | 划分存储空间 | 使分区内容可访问 | | **依赖关系** | 先分区,后挂载 | 需分区并格式化后才能挂载 | | **工具** | `fdisk`, `parted` | `mount`, `/etc/fstab` | | **持久性** | 写入磁盘元数据(永久生效) | 临时挂载(重启失效)或通过`fstab`永久化 | --- ### **4. 实际流程示例** 1. **分区** ```bash fdisk /dev/sda → 创建/dev/sda1分区 ``` 2. **格式化** ```bash mkfs.ext4 /dev/sda1 # 为分区赋予文件系统 ``` 3. **挂载** ```bash mount /dev/sda1 /mnt/ssd # 将分区链接到目录 ``` --- ### **5. 嵌入式注意事项** - **轻量化工具链**:优先使用`busybox`提供的`fdisk`或`mount`。 - **只读挂载**:若分区存放固件,可加`-o ro`选项防止误写。 - **自动挂载失败处理**:在`/etc/fstab`中使用`nofail`选项避免系统启动卡死。 - **Flash存储优化**:针对SSD/NAND Flash,选择`f2fs`或`ubifs`文件系统并启用TRIM。 --- 通过理解分区挂载的区别,可以更安全地管理嵌入式系统的存储资源,避免误操作导致数据丢失。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值