Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux Ext系列文件系统(看这一篇就够了!)

Linux Ext系列文件系统(看这一篇就够了!)

作者头像
用户11317877
发布于 2025-02-17 10:38:17
发布于 2025-02-17 10:38:17
14500
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

1. 文件系统

1.1 “块”

硬盘是典型的"块"设备, 操作系统读取硬盘数据的时候, 其实是不会一个个扇区地读取, 这样效率太低, 而是一次性连续读取多个扇区, 即一次性取⼀个”块”(block)。

硬盘的每个分区是被划分为⼀个个的”块”。⼀个”块”的⼤⼩是由格式化的时候确定的,并且不可以更改,最常⻅的是4KB,即连续⼋个扇区组成⼀个”块”。”块”是⽂件存取的最⼩单位。

注意

  1. 磁盘就是⼀个三维数组,我们把它看待成为⼀个"⼀维数组",数组下标就是LBA,每个元素都是扇 区
  2. 每个扇区都有LBA,那么8个扇区⼀个块,每⼀个块的地址我们也能算出来。
  3. 知道LBA:块号 = LBA/8
  4. 知道块号:LAB=块号*8+n.(n是块内第⼏个扇区)

1.2 “分区”

其实磁盘是可以被分成多个分区(partition)的,以Windows观点来看,你可能会有⼀块磁盘并且将它分区成C,D,E盘。那个C,D,E就是分区。分区从实质上说就是对硬盘的⼀种格式化。但是Linux的设备都是以⽂件形式存在,那是怎么分区的呢?

柱⾯是分区的最⼩单位,我们可以利⽤参考柱⾯号码的⽅式来进⾏分区,其本质就是设置每个区的起始柱⾯和结束柱⾯号码。此时我们可以将硬盘上的柱⾯(分区)进⾏平铺,将其想象成⼀个⼤的平⾯,如下图所⽰:

注意

柱⾯⼤⼩⼀致,扇区个位⼀致,那么其实只要知道每个分区的起始和结束柱⾯号,知道每⼀个柱⾯多少个扇区,那么该分区多⼤,其实和解释LBA是多少也就清楚了.

1.3 “inode”

之前我们说过 ⽂件=数据+属性 ,我们使⽤ ls -l 的时候看到的除了看到⽂件名,还能看到⽂件元数据(属性)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost linux]# ls -l
总⽤量 12
-rwxr-xr-x. 1 root root 7438 "9⽉ 13 14:56" a.out
-rw-r--r--. 1 root root 654 "9⽉ 13 14:56" test.c

每⾏包含7列: • 模式 • 硬链接数 • ⽂件所有者 • 组 • ⼤⼩ • 最后修改时间 • ⽂件名 ls-l 读取存储在磁盘上的⽂件信息,然后显⽰出来

其实这个信息除了通过这种⽅式来读取,还有⼀个stat命令能够看到更多信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost linux]# stat test.c
 File: "test.c"
 Size: 654 Blocks: 8 IO Block: 4096 普通⽂件
Device: 802h/2050d Inode: 263715 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-09-13 14:56:57.059012947 +0800
Modify: 2017-09-13 14:56:40.067012944 +0800
Change: 2017-09-13 14:56:40.069012948 +0800

到这我们要思考⼀个问题,⽂件数据都储存在”块”中,那么很显然,我们还必须找到⼀个地⽅储存⽂件的元信息(属性信息),⽐如⽂件的创建者、⽂件的创建⽇期、⽂件的⼤⼩等等。这种储存⽂件元信息的区域就叫做inode,中⽂译名为”索引节点”。

每⼀个⽂件都有对应的inode,⾥⾯包含了与该⽂件有关的⼀些信息。为了能解释清楚inode,我们需要是深⼊了解⼀下⽂件系统。

注意

  • Linux下⽂件的存储是属性和内容分离存储的
  • Linux下,保存⽂件属性的集合叫做inode,⼀个⽂件,⼀个inode,inode内有⼀个唯⼀的标识符,叫做inode号

所以⼀个⽂件的属性inode⻓什么样⼦呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * Structure of an inode on the disk
 */
struct ext2_inode {
 __le16 i_mode; /* File mode */
 __le16 i_uid; /* Low 16 bits of Owner Uid */
 __le32 i_size; /* Size in bytes */
 __le32 i_atime; /* Access time */
 __le32 i_ctime; /* Creation time */
 __le32 i_mtime; /* Modification time */
 __le32 i_dtime; /* Deletion Time */
 __le16 i_gid; /* Low 16 bits of Group Id */
 __le16 i_links_count; /* Links count */
 __le32 i_blocks; /* Blocks count */
 __le32 i_flags; /* File flags */
 union {
 struct {
 __le32 l_i_reserved1;
 } linux1;
 struct {
 __le32 h_i_translator;
 } hurd1;
 struct {
 __le32 m_i_reserved1;
 } masix1;
 } osd1; /* OS dependent 1 */
 __le32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
 __le32 i_generation; /* File version (for NFS) */
 __le32 i_file_acl; /* File ACL */
 __le32 i_dir_acl; /* Directory ACL */
 __le32 i_faddr; /* Fragment address */
 union {
 struct {
 __u8 l_i_frag; /* Fragment number */
 __u8 l_i_fsize; /* Fragment size */
 __u16 i_pad1;
  __le16 l_i_uid_high; /* these 2 fields */
 __le16 l_i_gid_high; /* were reserved2[0] */
 __u32 l_i_reserved2;
 } linux2;
 struct {
 __u8 h_i_frag; /* Fragment number */
 __u8 h_i_fsize; /* Fragment size */
 __le16 h_i_mode_high;
 __le16 h_i_uid_high;
 __le16 h_i_gid_high;
 __le32 h_i_author;
 } hurd2;
 struct {
 __u8 m_i_frag; /* Fragment number */
 __u8 m_i_fsize; /* Fragment size */
 __u16 m_pad1;
 __u32 m_i_reserved2[2];
 } masix2;
 } osd2; /* OS dependent 2 */
};
/*
 * Constants relative to the data blocks
 */
#define EXT2_NDIR_BLOCKS 12
#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
备注:EXT2_N_BLOCKS = 15

再次注意

  • ⽂件名属性并未纳⼊到inode数据结构内部
  • inode的⼤⼩⼀般是128字节或者256,我们后⾯统⼀128字节
  • 任何⽂件的内容⼤⼩可以不同,但是属性⼤⼩⼀定是相同的

到⽬前为⽌,相信⼤家还有两个问题:

  1. 我们已经知道硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,读取的基本单位是”块”。“块”⼜是硬盘的每个分区下的结构,难道“块”是随意的在分区上排布的吗?那要怎么找到“块”呢?
  2. 还有就是上⾯提到的存储⽂件属性的inode,⼜是如何放置的呢?

⽂件系统就是为了组织管理这些的!!

2. ext2文件系统

2.1 宏观认识

我们想要在硬盘上储⽂件,必须先把硬盘格式化为某种格式的⽂件系统,才能存储⽂件。⽂件系统的⽬的就是组织和管理硬盘中的⽂件。

在Linux系统中,最常⻅的是ext2系列的⽂件系统。其早期版本为ext2,后来⼜发展出ext3和ext4, ext3和ext4虽然对ext2进⾏了增强,但是其核⼼设计并没有发⽣变化,我们仍是以较⽼的ext2作为演⽰对象。

ext2⽂件系统将整个分区划分成若⼲个同样⼤⼩的块组(BlockGroup),如下图所⽰。只要能管理⼀个分区就能管理所有分区,也就能管理所有磁盘⽂件。

上图中启动块(BootBlock/Sector)的⼤⼩是确定的,为1KB,由PC标准规定,⽤来存储磁盘分区信息和启动信息,任何⽂件系统都不能修改启动块。启动块之后才是ext2⽂件系统的开始。

2.2 Block Group

ext2⽂件系统会根据分区的⼤⼩划分为数个Block Group。⽽每个Block Group都有着相同的结构组成。

2.3 块组内部结构

2.3.1 超级块(Super Block)

存放⽂件系统本⾝的结构信息,描述整个分区的⽂件系统信息。记录的信息主要有:bolck和inode的总量,未使⽤的block和inode的数量,⼀个block和inode的⼤⼩,最近⼀次挂载的时间,最近⼀次写⼊数据的时间,最近⼀次检验磁盘的时间等其他⽂件系统的相关信息。SuperBlock的信息被破坏,可以说整个⽂件系统结构就被破坏了

超级块在每个块组的开头都有⼀份拷⻉(第⼀个块组必须有,后⾯的块组可以没有)。为了保证⽂件系统在磁盘部分扇区出现物理问题的情况下还能正常⼯作,就必须保证⽂件系统的super block信息在这种情况下也能正常访问。所以⼀个⽂件系统的super block会在多个block group中进⾏备份,这些super block区域的数据保持⼀致。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * Structure of the super block
 */
struct ext2_super_block {
 __le32 s_inodes_count; /* Inodes count */
 __le32 s_blocks_count; /* Blocks count */
 __le32 s_r_blocks_count; /* Reserved blocks count */
 __le32 s_free_blocks_count; /* Free blocks count */
 __le32 s_free_inodes_count; /* Free inodes count */
 __le32 s_first_data_block; /* First Data Block */
 __le32 s_log_block_size; /* Block size */
 __le32 s_log_frag_size; /* Fragment size */
 __le32 s_blocks_per_group; /* # Blocks per group */
 __le32 s_frags_per_group; /* # Fragments per group */
 __le32 s_inodes_per_group; /* # Inodes per group */
 __le32 s_mtime; /* Mount time */
 __le32 s_wtime; /* Write time */
 __le16 s_mnt_count; /* Mount count */
 __le16 s_max_mnt_count; /* Maximal mount count */
 __le16 s_magic; /* Magic signature */
 __le16 s_state; /* File system state */
 __le16 s_errors; /* Behaviour when detecting errors */
 __le16 s_minor_rev_level; /* minor revision level */
 __le32 s_lastcheck; /* time of last check */
 __le32 s_checkinterval; /* max. time between checks */
 __le32 s_creator_os; /* OS */
 __le32 s_rev_level; /* Revision level */
 __le16 s_def_resuid; /* Default uid for reserved blocks */
 __le16 s_def_resgid; /* Default gid for reserved blocks */
 /*
 * These fields are for EXT2_DYNAMIC_REV superblocks only.
 *
 * Note: the difference between the compatible feature set and
 * the incompatible feature set is that if there is a bit set
 * in the incompatible feature set that the kernel doesn't
 * know about, it should refuse to mount the filesystem.
 * 
 * e2fsck's requirements are more strict; if it doesn't know
 * about a feature in either the compatible or incompatible
 * feature set, it must abort and not try to meddle with
 * things it doesn't understand...
 */
 __le32 s_first_ino; /* First non-reserved inode */
 __le16 s_inode_size; /* size of inode structure */
 __le16 s_block_group_nr; /* block group # of this superblock */
 __le32 s_feature_compat; /* compatible feature set */
 __le32 s_feature_incompat; /* incompatible feature set */
 __le32 s_feature_ro_compat; /* readonly-compatible feature set */
 __u8 s_uuid[16]; /* 128-bit uuid for volume */
 char s_volume_name[16]; /* volume name */
 char s_last_mounted[64]; /* directory where last mounted */
 __le32 s_algorithm_usage_bitmap; /* For compression */
 /*
 * Performance hints. Directory preallocation should only
 * happen if the EXT2_COMPAT_PREALLOC flag is on.
 */
 __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
 __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
 __u16 s_padding1;
 /*
 * Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set.
 */
 __u8 s_journal_uuid[16]; /* uuid of journal superblock */
 __u32 s_journal_inum; /* inode number of journal file */
 __u32 s_journal_dev; /* device number of journal file */
 __u32 s_last_orphan; /* start of list of inodes to delete */
 __u32 s_hash_seed[4]; /* HTREE hash seed */
 __u8 s_def_hash_version; /* Default hash version to use */
 __u8 s_reserved_char_pad;
 __u16 s_reserved_word_pad;
 __le32 s_default_mount_opts;
 __le32 s_first_meta_bg; /* First metablock block group */
 __u32 s_reserved[190]; /* Padding to the end of the block */
};
2.3.2 GTD(Group Descriptor Table)

块组描述符表,描述块组属性信息,整个分区分成多个块组就对应有多少个块组描述符。每个块组描述符存储⼀个块组的描述信息,如在这个块组中从哪⾥开始是inode Table,从哪⾥开始是Data Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有⼀份拷⻉。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 磁盘级blockgroup的数据结构 
/*
 * Structure of a blocks group descriptor
 */
struct ext2_group_desc
{
 __le32 bg_block_bitmap; /* Blocks bitmap block */
 __le32 bg_inode_bitmap; /* Inodes bitmap */
 __le32 bg_inode_table; /* Inodes table block*/
 __le16 bg_free_blocks_count; /* Free blocks count */
 __le16 bg_free_inodes_count; /* Free inodes count */
 __le16 bg_used_dirs_count; /* Directories count */
 __le16 bg_pad;
 __le32 bg_reserved[3];
};
2.3.3 块位图(Block Bitmap)

Block Bitmap中记录着Data Block中哪个数据块已经被占⽤,哪个数据块没有被占⽤

2.3.4 inode位图(inode Bitmap)

每个bit表⽰⼀个inode是否空闲可⽤。

2.3.5 i节点表(Inode Table)
  • 存放⽂件属性如⽂件⼤⼩,所有者,最近修改时间等
  • 当前分组所有Inode属性的集合

inode编号以分区为单位,整体划分,不可跨分区

2.3.6 Data Block

数据区:存放⽂件内容,也就是⼀个⼀个的Block。根据不同的⽂件类型有以下⼏种情况:

  • 对于普通⽂件,⽂件的数据存储在数据块中。
  • 对于⽬录,该⽬录下的所有⽂件名和⽬录名存储在所在⽬录的数据块中,除了⽂件名外,ls -l命令看到的其它信息保存在该⽂件的inode中。

Block号按照分区划分,不可跨分区

2.4 inode 和 datablock 映射

inode内部存在__le32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */ ,EXT2_N_BLOCKS =15,就是⽤来进⾏inode和block映射的

这样⽂件=内容+属性,就都能找到了。

请解释:知道inode号的情况下,在指定分区,请解释:对⽂件进⾏增、删、查、改是在做什么?

  • 分区之后的格式化操作,就是对分区进⾏分组,在每个分组中写⼊SB、GDT、Block Bitmap、Inode Bitmap等管理信息,这些管理信息统称:⽂件系统
  • 只要知道⽂件的inode号,就能在指定分区中确定是哪⼀个分组,进⽽在哪⼀个分组确定是哪⼀个inode
  • 拿到inode⽂件属性和内容就全部都有了

下⾯,通过touch⼀个新⽂件来看看如何⼯作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost linux]# touch abc
[root@localhost linux]# ls -i abc
263466 abc

为了说明问题,我们将上图简化

创建⼀个新⽂件主要有以下4个操作:

  1. 存储属性 内核先找到⼀个空闲的i节点(这⾥是263466)。内核把⽂件信息记录到其中。
  2. 存储数据 该⽂件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第⼀块数据复制到300,下⼀块复制到500,以此类推。
  3. 记录分配情况 ⽂件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。
  4. 添加⽂件名到⽬录 新的⽂件名abc。linux如何在当前的⽬录中记录这个⽂件?内核将⼊⼝(263466,abc)添加到⽬录⽂件。⽂件名和inode之间的对应关系将⽂件名和⽂件的内容及属性连接起来。

2.5 目录与文件名

问题: • 我们访问⽂件,都是⽤的⽂件名,没⽤过inode号啊? • ⽬录是⽂件吗?如何理解?

答案: • ⽬录也是⽂件,但是磁盘上没有⽬录的概念,只有⽂件属性+⽂件内容的概念。 • ⽬录的属性不⽤多说,内容保存的是:⽂件名和Inode号的映射关系

所以,访问⽂件,必须打开当前⽬录,根据⽂件名,获得对应的inode号,然后进⾏⽂件访问 所以,访问⽂件必须要知道当前⼯作⽬录,本质是必须能打开当前⼯作⽬录⽂件,查看⽬录⽂件的 内容!

2.6 路径解析

问题:打开当前⼯作⽬录⽂件,查看当前⼯作⽬录⽂件的内容?当前⼯作⽬录不也是⽂件吗?我们访问当前⼯作⽬录不也是只知道当前⼯作⽬录的⽂件名吗?要访问它,不也得知道当前⼯作⽬录的inode吗?

答案1:所以也要打开:当前⼯作⽬录的上级⽬录,额…,上级⽬录不也是⽬录吗??不还是上⾯的问 题吗? 答案2:所以类似"递归",需要把路径中所有的⽬录全部解析,出⼝是"/"根⽬录。

最终答案3:⽽实际上,任何⽂件,都有路径,访问⽬标⽂件,⽐如: /home/whb/code/test/test/test.c 都要从根⽬录开始,依次打开每⼀个⽬录,根据⽬录名,依次访问每个⽬录下指定的⽬录,直到访问到test.c。这个过程叫做Linux路径解析。

注意

所以,我们知道了:访问⽂件必须要有⽬录+⽂件名=路径的原因 根⽬录固定⽂件名,inode号,⽆需查找,系统开机之后就必须知道

可是路径谁提供? • 你访问⽂件,都是指令/⼯具访问,本质是进程访问,进程有CWD!进程提供路径。 • 你open⽂件,提供了路径 可是最开始的路径从哪⾥来? • 所以Linux为什么要有根⽬录,根⽬录下为什么要有那么多缺省⽬录? • 你为什么要有家⽬录,你⾃⼰可以新建⽬录? • 上⾯所有⾏为:本质就是在磁盘⽂件系统中,新建⽬录⽂件。⽽你新建的任何⽂件,都在你或者系 统指定的⽬录下新建,这不就是天然就有路径了嘛! • 系统+⽤⼾共同构建Linux路径结构.

2.7 路径缓存

问题1:Linux磁盘中,存在真正的⽬录吗? 答案:不存在,只有⽂件。只保存⽂件属性+⽂件内容 问题2:访问任何⽂件,都要从/⽬录开始进⾏路径解析? 答案:原则上是,但是这样太慢,所以Linux会缓存历史路径结构 问题2:Linux⽬录的概念,怎么产⽣的? 答案:打开的⽂件是⽬录的话,由OS⾃⼰在内存中进⾏路径维护

Linux中,在内核中维护树状路径结构的内核结构体叫做: struct dentry

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct dentry {
 atomic_t d_count;
 unsigned int d_flags; /* protected by d_lock */
 spinlock_t d_lock; /* per dentry lock */
 struct inode *d_inode; /* Where the name belongs to - NULL is
 * negative */
 /*
 * The next three fields are touched by __d_lookup. Place them here
 * so they all fit in a cache line.
 */
 struct hlist_node d_hash; /* lookup hash list */
 struct dentry *d_parent; /* parent directory */
 struct qstr d_name;
 struct list_head d_lru; /* LRU list */
 /*
 * d_child and d_rcu can share memory
 */
 union {
 struct list_head d_child; /* child of parent list */
 struct rcu_head d_rcu;
 } d_u;
 struct list_head d_subdirs; /* our children */
 struct list_head d_alias; /* inode alias list */
 unsigned long d_time; /* used by d_revalidate */
 struct dentry_operations *d_op;
 struct super_block *d_sb; /* The root of the dentry tree */
 void *d_fsdata; /* fs-specific data */
#ifdef CONFIG_PROFILING
 struct dcookie_struct *d_cookie; /* cookie, if any */
#endif
 int d_mounted;
 unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */
};

注意

  • 每个⽂件其实都要有对应的dentry结构,包括普通⽂件。这样所有被打开的⽂件,就可以在内存中形成整个树形结构
  • 整个树形节点也同时会⾪属于LRU(Least Recently Used,最近最少使⽤)结构中,进⾏节点淘汰
  • 整个树形节点也同时会⾪属于Hash,⽅便快速查找
  • 更重要的是,这个树形结构,整体构成了Linux的路径缓存结构,打开访问任何⽂件,都在先在这棵树下根据路径进⾏查找,找到就返回属性inode和内容,没找到就从磁盘加载路径,添加dentry结构,缓存新路径

3. 挂载分区

我们已经能够根据inode号在指定分区找⽂件了,也已经能根据⽬录⽂件内容,找指定的inode了,在指定的分区内,我们可以为所欲为了。可是:

问题:inode不是不能跨分区吗?Linux不是可以有多个分区吗?我怎么知道我在哪⼀个分区???

3.1 实验

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ dd if=/dev/zero of=./disk.img bs=1M count=5 #制作⼀个⼤的磁盘块,就当做⼀个分区 
$ mkfs.ext4 disk.img # 格式化写⼊⽂件系统 
$ mkdir /mnt/mydisk # 建⽴空⽬录 
$ df -h # 查看可以使⽤的分区 
Filesystem Size Used Avail Use% Mounted on
udev 956M 0 956M 0% /dev
tmpfs 198M 724K 197M 1% /run
/dev/vda1 50G 20G 28G 42% /
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 986M 0 986M 0% /sys/fs/cgroup
tmpfs 198M 0 198M 0% /run/user/0
tmpfs 198M 0 198M 0% /run/user/1002
$ sudo mount -t ext4 ./disk.img /mnt/mydisk/ # 将分区挂载到指定的⽬录 
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 956M 0 956M 0% /dev
tmpfs 198M 724K 197M 1% /run
/dev/vda1 50G 20G 28G 42% /
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 986M 0 986M 0% /sys/fs/cgroup
tmpfs 198M 0 198M 0% /run/user/0
tmpfs 198M 0 198M 0% /run/user/1002
/dev/loop0 4.9M 24K 4.5M 1% /mnt/mydisk
$ sudo umount /mnt/mydisk # 卸载分区 
whb@bite:/mnt$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 956M 0 956M 0% /dev
tmpfs 198M 724K 197M 1% /run
/dev/vda1 50G 20G 28G 42% /
tmpfs 986M 0 986M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 986M 0 986M 0% /sys/fs/cgroup
tmpfs 198M 0 198M 0% /run/user/0
tmpfs 198M 0 198M 0% /run/user/1002

注意

/dev/loop0 在Linux系统中代表第⼀个循环设备(loop device)。循环设备,也被称为回环设备或者loopback设备,是⼀种伪设备(pseudo-device),它允许将⽂件作为块设备(block device)来使⽤。这种机制使得可以将⽂件(⽐如ISO镜像⽂件)挂载(mount)为⽂件系统,就像它们是物理硬盘分区或者外部存储设备⼀样

3.2 结论

分区写⼊⽂件系统,⽆法直接使⽤,需要和指定的⽬录关联,进⾏挂载才能使⽤。 所以,可以根据访问⽬标⽂件的"路径前缀"准确判断我在哪⼀个分区。

4. 文件系统总结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数字转型全面开启,谁是垂直赛道的隐形冠军?
国内以5G、数据中心为代表的“新基建”大规模推进,不仅刺激了消费互联网的快速升级,还带动了全社会对产业互联网的关注热情。包括工业制造、交通物流、教育医疗在内的各个垂直行业,都在积极“上云”,积极拥抱5G,争先恐后地启动自己的数字化转型进程。
鲜枣课堂
2022/02/11
3050
数字转型全面开启,谁是垂直赛道的隐形冠军?
重磅!中国最新AI算力地图出炉:北京加冕冠军!杭州、深圳位列三甲
人工智能三大支柱:算力、算法和数据。数据,就是人工智能这只大军的粮草;算法就是装备;而算力则是战力。
新智元
2019/08/29
1K0
重磅!中国最新AI算力地图出炉:北京加冕冠军!杭州、深圳位列三甲
中兴通讯2024年年报AI业务解读:千年老二,大而不强
中兴通讯(SZ:000063)的主营业务ICT产品及解决方案,聚焦于“运营商网络、政企业务、消费者业务”。公司的主要产品是无线产品、核心网产品、有线产品、数据中心交换机、云电脑、服务器、数据中心、分布式数据库、家庭终端、手机及移动互联产品。 
AIGC部落
2025/04/11
1750
中兴通讯2024年年报AI业务解读:千年老二,大而不强
液冷技术:迎接AIGC时代数据中心的散热挑战
随着人工智能生成内容(AIGC)的跨越式发展,算力需求呈爆炸式增长,带动了数据中心的功耗和热管理需求的飞速上升。AI模型训练和推理过程中的高计算资源需求,导致服务器发热量大幅增加,对散热技术提出了更高的要求。根据Colocation America发布的数据,2020年全球数据中心单机柜平均功率已经达到16.5kW,比2008年增加了175%。液冷技术因此成为数据中心散热技术的新热点。
亿源通科技HYC
2024/08/15
8100
液冷技术:迎接AIGC时代数据中心的散热挑战
领跑中国市场,未来国产服务器仍任重道远
近日,国际权威调研机构IDC发布2014年第三季度全球服务器暨中国服务器市场调研报告,数据显示第三季度中国服务器市场整体出货量为464787台,较去年相比稳中有升。同时,数据显示,中国成为全球服务器增长的主引擎,而国产服务器弯道超车,占据中国市场主要市场份额。 中国成为全球服务器增长的主引擎 IDC公布的数据显示,全球服务器市场2014年第三季度厂商收入达到了127亿美元,较去年同期增长4.8%,同时2014年第三季度的服务器销量则达到238万台,较去年同期增长了5.7%。 不过IDC指出,2014年
人称T客
2018/03/20
2.7K0
领跑中国市场,未来国产服务器仍任重道远
AI刹住了浪潮信息下坡
2021年,浪潮信息营收670.48亿,扣非净利润18亿;2022年,浪潮信息营收696.35亿,扣非净利润17.44亿;2023年,浪潮信息营收658.67亿,扣非净利润11.18亿。从这三年的发展来看,浪潮信息已经连续几年出现营收增速放缓,而扣非净利润下滑的趋势。
刘旷
2025/06/16
1390
跨越数字鸿沟:超聚变刷新“南北东西”算力大版图
十几年后,当托马斯•弗里德曼再翻开自己2006年出版的著作《世界是平的》,不知是否会发出一声感叹:不是我不明白,这世界变化快!
IT创事记
2023/02/17
4110
跨越数字鸿沟:超聚变刷新“南北东西”算力大版图
1572 亿元服务器市场:戴尔 242亿、HPE 176亿、浪潮 155亿、联想 109亿、新华三 72亿、华为 29 亿
2021年12月11日,IDC发布的《全球服务器市场季度报告》显示: 2021Q3全球服务器市场同比上升8.8%至246.8亿美元(1571.7亿人民币); 出货量至337.6万台,同比去年增长9.6%。 2021年第三季度,全球服务器收入前五的是戴尔、HPE、浪潮、联想、新华三: 单位:百万美元 出货量排名前五的依次为戴尔、浪潮、HPE、联想、超微: 单位:台 厂商表现: 戴尔第三季度服务器业务收入 242 亿元,同比增长 1.1%。 市场份额同比减少 1.2% 至 15.4%。 HPE 收入
云头条
2022/03/18
2.2K0
算力网络大时代,超聚变的“九阶评估模型”带来了什么?
今年初,全国一体化大数据中心体系完成总体设计,“东数西算”工程正式全面启动,标志着一个“算力网络”的大时代正式开启。
大数据在线
2022/12/13
5260
算力网络大时代,超聚变的“九阶评估模型”带来了什么?
讯飞星火Lite版永久免费;彩云科技发布全新通用模型结构DCFormer;谷歌将测试在人工智能概述中引入广告丨每日大事件
5月21日消息,深圳市跨模态认知计算重点实验室、香港中文大学(深圳)趣丸科技联合实验室揭牌仪式在港中大(深圳)校园举行。据了解,该实验室将针对人工智能音频大模型相关的前沿课题进行研究,旨在突破行业难题,促进产学研深度融合,打造技术领先的生成式音频大模型,填补业界空白。
数据猿
2024/05/28
1K0
讯飞星火Lite版永久免费;彩云科技发布全新通用模型结构DCFormer;谷歌将测试在人工智能概述中引入广告丨每日大事件
爱奇艺旗下VR公司员工欠薪多月仍未到位;字节推出“ChitChop”大模型产品;亚马逊推出一款人工智能聊天机器人丨每日大事件
近日,毫末智行董事长张凯、CEO顾维灏联合发布《毫末正式迈入自动驾驶3.0时代》的内部信。张凯和顾维灏明确2024年毫末将有四场战役要打。首先是智驾生死战,要跨过关隘,打赢城市NOH落地这一硬仗;其次是以客户为中心做好乘用车量产交付,确保毫末第二代HPilot智驾产品明年的交付上车;第三是末端自动配送规模化之战,要扩大运营规模和范围,真正将末端无人配送完成商业闭环;最后是DriveGPT云端与车端落地之战,大模型会让毫末换一种方式去赢得竞争。
数据猿
2023/11/30
2790
爱奇艺旗下VR公司员工欠薪多月仍未到位;字节推出“ChitChop”大模型产品;亚马逊推出一款人工智能聊天机器人丨每日大事件
全球Q3服务器市场同比大涨37.7%,中国厂商表现领跑
IDC公布了2018年第三季度全球服务器市场季度追踪报告。报告显示,全球服务器市场第三季度表现强劲,市场规模达到234亿美元,同比大幅增长37.7%,出货量则达到320万台,同比增长18.3%。
大数据在线
2019/07/08
1.5K0
全球Q3服务器市场同比大涨37.7%,中国厂商表现领跑
2025:生成式AI如何重塑服务器市场
1. AI服务器市场与技术升级:2024-2025年AI服务器市场将大幅增长,NVIDIA和AMD在高端GPU及先进封装技术(如CoWoS、HBM)上的投入推动出货量,但如何协调需求增长与技术产能扩展是关键挑战。
数据存储前沿技术
2025/02/11
2600
2025:生成式AI如何重塑服务器市场
大模型的火烧到了AI服务器上
大模型的纷争已经随着各大入局者公布产品后,热度逐渐退去,但是由大模型带来的产业链高频共振,已经传递了算力层。
科技云报道
2023/08/10
2300
大模型的火烧到了AI服务器上
数据中心的能耗焦虑, 到底有没有最优解?
几年前的时候,每当电商大促、春晚红包等节点,宕机和救火几乎是从不缺席的戏份。近两年却是另一番景象:即便是在618大促这样的流量波峰,大多数电商平台都顶住了高并发的压力,背后离不开算力的迅猛增长。
Alter聊科技
2023/01/13
5950
东数西算下,液冷数据中心为何日趋重要?
在“双碳”目标和“东数西算”工程的推动下,液冷、深度学习、高性能计算、多样化计算等技术前景广阔。数据中心、超算平台基础设施可按照不同的冷却方法进行划分风冷数据中心基础设施和液冷数据中心基础设施。数据中心散热技术领域不断创新。目前,液冷技术以其稳定性高、散热效率高等优势逐渐显现出优势。在“碳达峰”和“碳中和”目标的背景下,液冷技术的市场需求十分广阔。据赛迪顾问预计,到2025年中国液冷数据中心基础设施市场规模有望达到245.3亿元。液冷数据中心基础设施又可分为冷板式液冷数据中心基础设施和浸没式液冷式数据中心基础设施冷却数据中心基础设施。
液冷服务器
2023/02/28
8450
东数西算下,液冷数据中心为何日趋重要?
液冷技术与电信从业者
液冷技术虽非全新概念——早在19世纪末就被用于超高压变压器的绝缘与冷却,汽车内燃机的冷却系统更是其典型应用,但将其引入电子设备领域曾长期被视为风险之举。
通往ICT之路
2025/02/07
1490
液冷技术与电信从业者
云生态厂商,到底谁是TOP1?(深度解读)
都说国内云计算发展很好,生态也越来越完善,但是到底好在哪里,完善在哪里,很多网工都一知半解。
腾讯产业互联网学堂
2023/07/25
5200
算力时代将至——我们是否已经做好准备
| 导语   在未来5到10年,算力会成为大家所熟知的一种“新能源”。算力将和我们日常生活中的水、电、燃气、汽油一样,成为不可或缺的一种民用资源,而提供和维持这些的系统和设施就是我们常说的基础设施。文章来源于安全平台部天幕团队。  “算费”(我们暂且这样称呼),可能是计算1Gb数据或是10Gb数据所需要支付的费用,有点类似现在大家在用的流量,在未来5到10年,算力会成为大家所熟知的一种“新能源”。算力将和我们日常生活中的水、电、燃气、汽油一样,成为不可或缺的一种民用资源,而提供和维持这些的系统和设施就
腾讯大讲堂
2020/10/16
7290
27家网络安全上市企业一季报速览 | FreeBuf咨询
截至今日,我国上市企业已全部完成2022年报以及2023一季度报告的披露,FreeBuf咨询对27家网络安全上市企业营收、利润等核心财务指标进行梳理,同时对这些企业发展战略进行大致观察。 基本面初步企稳,营收回升速度呈分化态势 2022是内忧外患的一年,疫情的冲击叠加国际地缘冲突与恶性通胀伴随的货币紧缩政策,我国经济面临多重压力。2023年,随着疫情影响的逐步消退,国际流动性环境的逐步稳定,我国基本面指标开始回暖。 然而,复苏不是一蹴而就的,2023Q1中国网络安全上市企业整体处在经济复苏的早期阶段,出现企
FB客服
2023/05/12
1K0
27家网络安全上市企业一季报速览 | FreeBuf咨询
推荐阅读
数字转型全面开启,谁是垂直赛道的隐形冠军?
3050
重磅!中国最新AI算力地图出炉:北京加冕冠军!杭州、深圳位列三甲
1K0
中兴通讯2024年年报AI业务解读:千年老二,大而不强
1750
液冷技术:迎接AIGC时代数据中心的散热挑战
8100
领跑中国市场,未来国产服务器仍任重道远
2.7K0
AI刹住了浪潮信息下坡
1390
跨越数字鸿沟:超聚变刷新“南北东西”算力大版图
4110
1572 亿元服务器市场:戴尔 242亿、HPE 176亿、浪潮 155亿、联想 109亿、新华三 72亿、华为 29 亿
2.2K0
算力网络大时代,超聚变的“九阶评估模型”带来了什么?
5260
讯飞星火Lite版永久免费;彩云科技发布全新通用模型结构DCFormer;谷歌将测试在人工智能概述中引入广告丨每日大事件
1K0
爱奇艺旗下VR公司员工欠薪多月仍未到位;字节推出“ChitChop”大模型产品;亚马逊推出一款人工智能聊天机器人丨每日大事件
2790
全球Q3服务器市场同比大涨37.7%,中国厂商表现领跑
1.5K0
2025:生成式AI如何重塑服务器市场
2600
大模型的火烧到了AI服务器上
2300
数据中心的能耗焦虑, 到底有没有最优解?
5950
东数西算下,液冷数据中心为何日趋重要?
8450
液冷技术与电信从业者
1490
云生态厂商,到底谁是TOP1?(深度解读)
5200
算力时代将至——我们是否已经做好准备
7290
27家网络安全上市企业一季报速览 | FreeBuf咨询
1K0
相关推荐
数字转型全面开启,谁是垂直赛道的隐形冠军?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验