Skip to content

Filesystems

Z User edited this page Oct 24, 2026 · 3 revisions

语言:简体中文 | Filesystems-EN

文件系统与存储

VFS

所有文件访问都通过一个 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 键擦除磁盘。

/etc 卷

一个 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 /;挂载阴影不会复制子项。

Clone this wiki locally