根分区和主分区是否可能具有不同的文件系统,并位于单独的物理设备上?


10

想象一下,我在SATA HDD上存在的单独分区上用ext3文件系统格式化了根,而在Intel SSD上存在的另一个btrfs分区上用了home目录。

我从Internet下载了一个文件并将其临时保存到/tmp(在根文件系统中),然后决定将其移动到主目录(第二个分区)。

我可以感受到在后台进行如此简单的mv命令工作所经历的痛苦过程。

那么,首先,根目录和主目录是否可以具有不同的文件系统?其次,假设上一个问题的答案是“是”,那么操作系统如何管理从ext3到的所有过渡btrfs,然后针对不同的磁盘类型(HDD和SSD)使用不同的设备驱动程序?


3
它是分层的。内置在块设备层之上的文件系统层。您可以在文件系统层中使用任何合适的文件系统。您可以在该块设备层中使用任何合适的块设备。每个安装点可以具有自己的文件系统和设备。
锯末

@sawdust,这是您指出的非常有趣的东西,即文件系统层和块设备层。它们如何联系?任何读数都会有所帮助。
Karim Manaouil'6

对文件系统了解不多,但是我认为该过程与将文件复制到外部FAT32驱动器没有什么不同
Blaine


为什么升级到ext4如此简单,您仍在2017年使用ext3?
David Foerster

Answers:


25

答案是肯定的,您可以在任何设备上拥有任何目录,并运行操作系统可以支持的任何文件系统。

因此,您/ /var /home /opt甚至可以/home/afr0ck在不同的设备上拥有不同的分区,不同的文件系统。

您不仅可以,而且很常见。例如,始终建议保留/var并保留/home在不同的分区上,/因为这些分区最有可能无意间消耗了磁盘空间-如果它们填满了,不会对系统造成太大的影响。如果它们与root在同一分区中,则可能导致系统停止。

而且出于速度原因,您可能希望不同的目录在不同的设备上运行。并将不同的文件系统用于不同的目的。例如,也许ext4是您想要的OS文件,因为它们变化不大,但是您可能希望将btrfs用于/ home,以便可以保留快照以进行备份。这些都是每个人可以针对其特定用例做出的所有决定。

操作系统的用户空间部分不需要了解不同的设备和文件系统类型。它所做的一切都要求内核移动文件,然后内核从那里协调所有内容。因此,该mv命令(例如)与文件系统和设备类型无关。内核调用读取和写入不同分区所需的任何驱动程序。


7
指出mv(1)第一次尝试rename(2)该文件很有用。然后回落到复制并删除。因此,尝试重命名是如何mv确定与FS无关的方式是否可行。(rename(2)在不同的设备之间移动时,无论是否使用相同的文件系统驱动程序,@ afr0k总是失败。)
Peter Cordes

1
@PeterCordes呵呵,我不知道重命名是一件事情。我一直用mv重命名。

5
@stanri:mv不派生/执行rename(1)命令,它只是尝试rename(2)系统调用。没有标准的renameshell命令。在某些系统上,它是来自util-linux的pattern-substitution多文件重命名命令。我不是在谈论shell命令,而是在mv内部如何工作。
彼得·科德斯

甚至/ usr都可以驻留在不同的分区上,这就是/ bin / lib和/ sbin中包含某些真正必要内容的原因-是否所有安装程序都支持它是另一回事。
rackandboneman

7

是的,单独的文件系统(挂载点)可以是不同的文件系统类型。  /proc始终是procfs文件系统,并且/sys始终是sysfs。临时文件系统(有时包括/tmp)通常是tmpfs,并且在工作组设置中,用户的主目录(及其工作产品目录)通常是nfs或其他远程(网络/共享)文件系统类型。

操作系统不需要任何特殊的管理。从某种意义上说,在用户级别,所有文件系统看起来都是相似的,从某种意义上说,ls清单在任何目录中看起来都几乎相同。除此之外,文件系统不会交互。即使在同一物理磁盘上,相同文件系统类型的两个文件系统(分区)之间,也没有链接1。例如,将文件从一个文件系统(挂载点)移动到另一个文件系统总是涉及复制并删除原始文件。它们是否在不同磁盘上的分区无关紧要。不管其中之一是HDD,一个是SSD。一个是ext3一个都没有关系btrfs。不管是内部的(在计算机机箱内部)还是外部的(在外部几英寸,通过电缆连接)—还是远程(通过网络访问),都没有关系。

说到网络,它有点像ssh。它从键盘读取并将输入的字符发送到网络。同时,它从网络读取并在屏幕上显示结果。

或考虑一下:假设您正在打电话,并且正在调解另一个电话上的人与房间中另一个人之间的对话。没什么大不了的。
________
1(符号链接除外),但它们可以跨越文件系统边界。


1
我在很大程度上同意您的回答,但对于/ tmp而言,将其作为tmpfs并不是很典型(尽管可能在某些发行版中设置为此类)-通常它不在根分区上,并在启动时清除。Ubuntu tand Redhat类型发行版使用/ dev / shm作为tmpfs,
davidgo

我很困惑。我已经更新了答案。
G-Man说'Resstate Monica''6

1
@davidgo:/tmptmpfs上不默认包含哪些Linux发行版?我还认为这几乎是标准做法,因为您始终可以放入东西/var/tmp(尽管在启动时不会清除)。我不是跨发行默认值的专家,只是Debian / Ubuntu和Arch。借助这些功能和RedHat,它可以覆盖那里已安装的Linux系统的很大一部分(但不是总发行版的很大一部分)。
彼得·科德斯

(忽略嵌入式系统)我只定期使用Centos和Ubuntu-两者都将磁盘用于/ tmp。-我敢肯定,这意味着Debian,Redhat和Mint都会遵循相同的惯例。我的Android设备没有/ tmp
davidgo

2
@PeterCordes tmpfsLinux 的兴起只是最近5-7年左右。例如Fedora正在他们的Wiki上讨论该更改,直到2012年,我相信它是在Debian Wheezy中引入的。
鲍勃·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.