当前位置: 首页 > news >正文

Whiteout

AUFS / Overlay2(联合文件系统)的语境下,Whiteout(白化文件 / 遮蔽标记)是一个极其聪明的“障眼法”。

既然我们前面说了,底层的那些图层是绝对只读、不能修改、也不能删除的,那就会引发一个悖论:

“如果我在容器里,把底层自带的一个文件给『删了』,AUFS 该怎么表现出来?”

底层的物理文件根本删不掉,但用户在容器里执行了rm -rf file.txt,再次输入ls时,这个文件确实消失了。

这个让文件“凭空消失”的魔术,就是靠Whiteout来实现的。


1. 大白话原理:涂改液与小贴纸

继续用 PS 图层或者透明胶片的比喻:

底层系统(只读层)上画了一个大苹果(file.txt)。因为底层不能动,你没办法拿橡皮擦把这个苹果擦掉。

这时候,如果你在容器里执行了“删除”操作,AUFS 就会在最上面的顶层(你的透明胶片上),在对应大苹果的那个位置,啪叽贴上一张不透明的白色小贴纸(这个贴纸就叫 Whiteout 文件)

当用户从上往下看(也就是在容器里执行ls)时,因为视线被最上层的白色贴纸挡住了,底层的那个大苹果就被“遮蔽”了。对用户来说,这个文件就像是被彻底删除了。


2. 内核视角:Whiteout 到底长啥样?

在底层的 Linux 文件系统里,这个“白色小贴纸”可不是闹着玩的,它有具体的存在形式:

  • 在 AUFS 中:如果你删除了一个叫foo的文件,AUFS 会在可写层创建一个隐藏文件,名字叫.wh.foo(前缀了.wh.)。当 AUFS 驱动扫描到有.wh.开头的文件时,就会明白:“哦,这个文件被用户咔嚓了,对用户隐藏它。”
  • 在 Overlay2 中(现代 Docker 的标配):它的实现更底层,会创建一个主次设备号为 0:0 的字符设备(Character Device)。内核一看到这个特殊的设备节点,就会自动在虚拟目录里把对应的底层文件给隐藏掉。

3. 为什么我们要关心 Whiteout?(避坑指南)

这个机制虽然精妙,但它带来了一个非常反直觉的“大坑”,这也是为什么很多初学者打包 Docker 镜像时,镜像体积会莫名其妙爆掉的原因:

❌ 错误的减肥姿势:

你在写 Dockerfile 的时候:

  • 第一步(第一层):下载了一个1 GB1\text{ GB}1GB的压缩包并解压安装。
  • 第二步(第二层):顺手执行了rm -rf big_file.tar.gz

你以为你把镜像体积缩减了1 GB1\text{ GB}1GB完全没有!
因为第一步的1 GB1\text{ GB}1GB已经写死在只读层了。你第二步的删除动作,只是在可写层建了一个几字节的Whiteout 贴纸把拉链包遮住了。这个1 GB1\text{ GB}1GB的死权重依然结结实实地躺在你的硬盘里,并随着镜像一起被传输。

正确的减肥姿势:

必须在同一步(同一个RUN指令)里,把下载、解压、删除一气呵成:

RUN wget http://example.com/big.tar.gz && tar -xvf big.tar.gz && rm big.tar.gz

因为在同一个 Layer 内部,文件还没沉淀到下层的“只读层”,这时候删除是真的物理删除,不会产生 Whiteout 贴纸。


总结

Whiteout 就是联合文件系统里的“掩耳盗铃”。因为底层删不掉,所以内核选择在最上层糊一层“白漆”(Whiteout),骗过用户的眼睛。

http://www.jsqmd.com/news/989743/

相关文章:

  • DNN增强的频率约束最优潮流技术解析
  • AD7606多通道数据采集实战:基于STM32 HAL库的SPI DMA+双缓冲实现指南
  • 单相逆变器滑模控制模型仿真滑膜控制研究(Simulink仿真实现)
  • 从MATLAB到Simulink:把fal函数封装成S-Function,在电机控制模型中实战验证
  • 高校课程用Android人事管理App完整工程(Eclipse版,含APK与多屏适配资源)
  • 如何高效使用Decker:从多媒体创作到交互式文档的完整指南
  • 5G NR开发实战:用Python仿真LDPC编码全流程(附Base Graph选择、速率匹配代码)
  • MySQL知识点 覆盖索引、MVCC、存储引擎、事务锁、性能优化等核心点
  • 层次化稀疏编码:构建可解释AI的新范式
  • 为什么AI代码审查工具降低缺陷率总失败?先补齐这2个关键条件
  • GHelper终极指南:如何用轻量级工具彻底解放华硕笔记本性能
  • 实用AIri容器化部署指南:解决复杂AI角色部署挑战
  • 别再只做检测了!用YOLOv5+DeepSort实现视频多目标跟踪,保姆级代码调试与效果优化实战
  • 成套工装服饰生产工艺难点攻克与自动化设备应用研究
  • 随机子空间嵌入技术:高效降维与最小二乘求解
  • MySQL 系统学习之路 第一篇:服务安装、基础概念与架构全解
  • 告别串口调试助手:用CANoe CAPL脚本实现RS485/RS232自动化测试(附完整源码)
  • 如何三步备份QQ空间历史说说:开源工具的完整指南
  • 如何高效使用渔人的直感:FF14钓鱼智能计时器完整指南
  • Shairport4w完整教程:3分钟将Windows电脑变成免费AirPlay接收器
  • OverlayFS
  • 喜马拉雅FM音频下载器:跨平台开源工具终极指南,3步轻松下载有声读物
  • 论文双检难题破解:告别降重、去AI痕迹二选一困境
  • 解锁AMD Ryzen隐藏实力:用SMUDebugTool实现硬件级精准调校
  • Python工程师在AI工程化方向的具体技术栈和工具链有哪些?
  • Assistant-UI:一站式高效构建AI聊天界面的终极React组件库
  • 2026年 EVA直发器/脱毛仪/锂电钻/平板硬包十大厂家推荐:精密防护与便携收纳的专业之选 - 品牌发掘
  • 射电AGN中H I吸收现象的研究与MeerKAT观测
  • 在Steam Deck上搭建你的怀旧游戏博物馆:EmuDeck配置指南
  • OpCore-Simplify:让黑苹果配置从8小时缩短到30分钟的智能助手