linux根目录扩展问题

一个目录不是不能挂载两个分区吗?那么根目录扩展空间又是怎么实现的呢?(原理)

首先一个目录是可以挂载多个分区的,原理是由linux的文件系统来实现的,在Linux里你可以认为分区就是文件夹。具体参考https://blog.csdn.net/bv1315008634/article/details/53327002。不知道你对docker是否有了解,docker是基于操作系统的虚拟化,它的底层实现都是Linux的底层实现对你的疑问很具有参考价值,详见https://www.cnblogs.com/wade-luffy/p/6589254.html。尤其是里面介绍到的联合文件系统,希望能帮到你,我很缺C币。

这个没有限制,只要你磁盘够大 够多,

单实际上 服务器只有4个磁盘,1个主分区 其他3个 估计你最多3个,当然你可以扩展无上限 磁盘阵列

首先,根目录扩展的目的是什么,在虚拟机上如果要扩展根目录的话,只要你计算机硬盘分区足够大就可以啊,在嵌入式Linux设备下,只要你的flash容量足够大也是可以的啊!

各位大神!我主要是想知道原理 不是方法步骤,也不是应用场景

看下 linux 内核 fs模块的代码

比如 dir.c

static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct dentry *dentry)
{
struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dentry->d_sb);
struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode(old_dentry));
struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
int ret;
uint8_t type;
uint32_t now;

/* Don't let people make hard links to bad inodes. */
if (!f->inocache)
    return -EIO;

if (d_is_dir(old_dentry))
    return -EPERM;

/* XXX: This is ugly */
type = (d_inode(old_dentry)->i_mode & S_IFMT) >> 12;
if (!type) type = DT_REG;

now = get_seconds();
ret = jffs2_do_link(c, dir_f, f->inocache->ino, type, dentry->d_name.name, dentry->d_name.len, now);

if (!ret) {
    mutex_lock(&f->sem);
    set_nlink(d_inode(old_dentry), ++f->inocache->pino_nlink);
    mutex_unlock(&f->sem);
    d_instantiate(dentry, d_inode(old_dentry));
    dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
    ihold(d_inode(old_dentry));
}
return ret;

}

  • 备份目录
  • 创建新的分区(可以是磁盘,或者磁盘部分)
  • umount目录
  • mount目录到新的分区
  • 复制备份内容到mount之后的目录
  • 删除备份(可选)

这个没有限制,只要你磁盘够大 够多,
单实际上 服务器只有4个磁盘,1个主分区 其他3个 估计你最多3个,当然你可以扩展无上限 磁盘阵列

一个目录可以挂载多个分区。你可以在/mnt中建立多个文件夹,分别挂载不同的目录。
至于一个分区挂载到多个目录,本人没有试过,但似乎没有必要。如果是怕普通用户没法使用,更改目录权限即可。