Repository navigation
Filesystems
Z User edited this page Oct 24, 2026
·
3 revisions
语言:简体中文 | Filesystems-EN
所有文件访问都通过一个 VFS(fs/fs_vfs.c)进行:这是一个统一的
open/read/write/seek/close/stat/mkdir/rmdir/readdir/lookup API,支持
可插拔的文件系统类型。路径遍历全局节点树并透明地跨越
挂载点。每个文件系统的大小写敏感性、强制权限位和
64 位寻址偏移量都是真实的 VFS 行为。
| 类型 | 读取 | 写入 | 存储位置 |
|---|---|---|---|
| ramfs | 是 | 是 | 内存(易失)- 默认根文件系统 |
| FAT32 | 是 | 是 | 任何块设备;支持长文件名 |
| exFAT | 是 | 是 | 任何块设备 |
| ext4 | 是 | 是 | 任何块设备(基于扩展) |
| /etc 卷 | 是 | 是 | 挂载在 /etc 的小型 FAT32 镜像 |
oc> dskstat (list block devices)
oc> mkfs.fat32 ata0 confirm (format - the confirm arg is required)
oc> mkfs.exfat usda confirm
oc> mkfs.ext4 ata0 confirm
oc> fatmount ata0 /mnt (mount FAT32)
oc> mount (list mounts; umount unmounts)
格式化是破坏性操作 - 每个 mkfs.* 都需要字面意义的
confirm 参数,以防意外的 Enter 键擦除磁盘。
一个 32 MiB 的 FAT32 镜像,保存系统的持久状态:
opencube.conf (key=value system configuration - see `config`)
ssh host keys (sshd identity - see [[Networking|network]])
kernel.log (rotated kernel log - see [../internals/klog.md])
crash dumps (see [[Recovery|recovery]])
配置的读写通过 config 命令和
L1 l1_ext_config_* 接口族进行;/etc 卷在启动时
如果存在会自动挂载。
块层为实例命名(ata0、usda、nvme0、vdisk0
用于 virtio,sd0 用于 SD),并在其上提供
分区扫描:
- ATA/ATAPI PIO 和总线主控 DMA(PRDT 对齐由 堆的 32 字节头块保证)
- AHCI - SATA 控制器
- NVMe - PCIe SSD
-
virtio-blk - QEMU 下的快速路径(
-device virtio-blk-pci) - USB MSC - 通过任何 USB 栈的 大容量存储设备
- SD/SDHCI 和 SCSI(LSI 53C8xx 系列)控制器
扫描 GPT 和 MBR(msdos)分区表;分区设备
与整盘设备一起出现。支持 fdisk 风格的检查
和每个分区的挂载 - 请参阅磁盘域的
Command-Reference。
oc> ls /mnt
oc> cat /mnt/hello.txt
oc> write /mnt/hello.txt "new content"
oc> cp /mnt/a.txt /mnt/b.txt
oc> mv /mnt/a.txt /mnt/c.txt
oc> rm /mnt/c.txt
oc> mkdir /mnt/dir
oc> touch /mnt/empty.txt
oc> editor /mnt/notes.txt (full-screen editor)
oc> fsck ata0 (filesystem check)
oc> fstest (VFS + per-fs self-test suite)
- 长路径和文件名:FAT32 LFN 完全支持,包括 生成带冲突扫描的别名,以及在读取时进行校验和/序列 验证。
- FAT32 维护双 FAT 镜像和 FSINFO 空闲簇提示; exFAT 跟踪活动的 FAT。
- ramfs 稀疏空洞读回为零。
- 拒绝
umount /;挂载阴影不会复制子项。