linux filesystem,linux系统怎么用

本篇文章给大家谈谈linux filesystem,以及linux系统怎么用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

linux里面df-h左边一列filesystem作用是什么

在解释df命令前,需要先对mount基本操作做一下解释。一般挂载一个文件系统系统的时候我们会用命令(例如):

或者额外指定一些选项:

那mount后面的那些东西都是什么呢?ext4肯定是文件系统的类型,/dev/sda1是带有ext4文件系统ondisk结构的一个存储设备,/mnt就是挂载点(mountpoint),再后面的就是挂载选项。

对比上面的命令,我们看一下df-h的输出:

问题问最左侧一列是什么。从最左侧一列的标题我们可以看到"Filesystem",那么说这一列对应的是文件系统类型吗?看到tmpfs和devtmpfs的时候,似乎是文件系统类型。但是这一列还有诸如:/dev/sda1和/dev/mapper/fedora_xxx--01-root这样的设备名,这么看的话这一列似乎又不是文件系统类型名,而是设备名。

那到底最左侧一列是什么呢?有一点可以肯定的是最左侧这列肯定不是挂载点,因为很明显挂载点在最右侧"Mounted on"那列,所以所有告诉你最左侧那列是挂载点的都不要相信。

那最左侧一列到底是文件系统类型还是设备名呢?我们继续往下看。

为了更深入了解df-h最左侧一列到底是什么,我们需要了解mount系统调用的格式,我们看mount(2)的手册:

(新mount API的话可以看fsopen, fsconfig, fsmount等,没有的就看mount的就行)。

我们看到mount一个文件系统的时候有五个参数,后两个和options/flags有关(“大部分”和mount命令里-o选项后面那些有关),我们暂且不管,我们就看前三个:source, target和filesystemtype。

filesystemtype肯定是对应mount命令里面诸如“-t ext4”的选项(在不用-t选项指明文件系统类型的时候,mount命令也会尝试从设备上获取文件系统的类型)。总之这个参数没什么可讨论的,它肯定就是诸如ext4, xfs, btrfs, tmpfs等表示文件系统类型的字符串。

再看target,我觉得它也很好理解,顾名思义它就是挂载的目的地,也基本上就是mountpoint。

最后就剩下source这个参数了,我们也只剩下设备名没有对应了,那这个source就是设备名了呗?并不准确!

即使不深入内核查看mount系统调用的过程,我们也可以通过mount(2)手册描述"DESCRIPTION"的第一句话来了解个大概:

mount() attaches the filesystem specified by source(which is often a pathname referring to a device, but can also be the pathname of a directory or file, or a dummy string) to the location(a directory or file) specified by the pathname in target.

直接翻译这句话就是:mount系统调用把一个由"source"指明的文件系统附/挂在由target指明的路径上。解释这个问题的重点在一个第一个括号里!这个source通常是指向设备的路径名,但也可以是一个目录或文件的路径名,甚至可以是一个虚构的没用的字符串。

source是设备名

通常我们挂载文件系统的时候都是指定一个含有文件系统ondisk结构的设备名。

这时候我们就可以从df-h的输出中看到:

设备名对应df-h最左侧一行。

source是目录名或文件名

source除了可以是存储设备以外,还可以是目录或文件名,比如:

这时候我们得到df-h的输出是:

(为了得到bind mount的情况,我额外使用的-a选项)我们看到df最左侧并不是/etc,而是/dev/mapper/fedora_xxx-root。这其实和bind原理有关,因为/etc在fedora_xxx-root所含的文件系统上,所以这里直接显示为/dev/mapper/fedora_xxx-root。

其实通过findmnt可以看到bind的关系:

findmnt给出了mount source是/etc。

source是虚设的名字

第三种情况就是dummy name的情况,在挂载诸如tmpfs, proc这样的文件系统的时候,由于这些文件系统只存在于内存中,所以它们不需要指定设备名或文件名之类的,因为文件系统类型(filesystemtype)已经可以足够表明要挂载的文件系统对象了。这时候source这个参数就显得有些没用了,这种情况我们允许source可以是随便一个名字,比如:

这时候-t proc和-t tmpfs已经足够指定我们要挂载的文件系统了,所以后面我们随便起了个名字,比如myproc和mytmp。这时候我们得到df-h的输出如下:

可以看到我们所用的dummy name出现在了df-h输出的最左侧一列。也就是说此时最左侧一列是虚设的字符串,是挂载的时候随便起的名字。你可以随便起一个你觉得合适的能起到提示作用的名字,而一般人将这个名字起的和文件系统名一样,所以你才会看到诸如:

这样的输出,其实最左侧一列并不非得是文件系统的名字,只是挂载的时候故意将source设置为这样的名字而已。

推测结论

到此我相信很多人应该已经可以猜到df-h最左侧一列到底是什么了,它并不是文件系统类型,更不是挂载点,而是基本上和mount系统调用的source参数相对应。一般来说是文件系统所在的设备的名字,同时也可以是一个虚设的名字,而一般习惯将这个虚设的名字设置为和文件系统类型同名。

验证

作为开源软件,没有什么比源代码更有说服力。虽然我认为上面的结论已经很站得住脚了,但是代码就放在那,不打开看一把真是愧对程序员这三个字。下面我们就粗略的看一下df.c的代码:

df这个命令的源程序就在GNU的coreutils这个项目里,可以通过下面的途径获得源代码:

拿到代码后我们迫不及待的找到df.c文件开始翻看。在省略掉大量翻阅细节后,我在df.c:main()函数里找到了和获取挂载信息有关的一段代码:

这个read_file_system_list就是我们下面要看的一个函数,它不在df.c里,而是在gnulib/lib/mountlist.c文件里。因为不止df命令需要获取mountlist,很多其它命令也有需要获取mountlist的时候(比如mount-l),所以获取mountlist就作为了一个库函数。这个函数比较长,我截取一小部分:

大概的意思就是从/proc/self/mountinfo这个文件中获取mountlist(或退回使用老方法)。通过 Linux/Documentation/filesystems/proc我们可以找到/proc/self/mountinfo的格式:

这里也提到了mount source,而read_file_system_list()代码中我们看到这里将source和me_devname关联到了一起,而me_devname又和dummy关联到了一起。所以一切都指向source。

再回过头看df.c,它在main函数得到通过read_file_system_list()函数得到mount_list(包括me_devname)后调用了get_all_entries。而这个get_all_entries就是通过get_dev把mount_list遍历一遍:

这里我们看到me_devname给了get_dev的第一个参数:

get_dev的第一个参数device又给了dev_name变量,最后dev_name变量和SOURCE_FIELD这个输出关联了起来。那这个SOURCE_FIELD又和什么有关联呢?从df.c中我们找到了:

关键字“Filesystem”这个title就和SOURCE_FIELD关联了起来。

想想df-h的输出最左侧一列的tile是什么?就是这个"Filesystem"。

这样一切都串联了起来df-h调用read_file_system_list从/proc/self/mountinfo得到mount list信息,将mount list中的mount source和mount_entry的me_devname关联起来,后通过get_all_entries和get_dev将这个me_devname(也就是mount source)打印在“Filesystem”这列的下面,作为了df-h最左侧的输出。

知识还是要求甚解,不要你觉得,要现实逻辑觉得,要事实依据觉得。

grubunknownfilesystem删除linux

grubunknownfilesystem是一个常见的错误,发生在删除或者修改了Linux系统分区后,grub无法找到正确的启动文件。要解决这个问题,有以下几种方法:

1、使用Windows安装盘或者修复盘,进入命令提示符,运行bootrec/fixmbr和bootrec/fixboot命令,修复Windows的启动记录。

2、使用Linux安装盘或者修复盘,进入命令提示符,运行grub-install和grub-mkconfig命令,重新安装和配置grub。

3、使用专门的工具,如boot-repair-disk或者EasyBCD,自动检测和修复启动问题。

Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统。

filesystem和mount on的区别

filesystem和mount on的区别

使用上两者没有区别,都是挂载挂载Linux系统外的文件,mmount为挂入MS-DOS文件系统,为mtools工具指令。

mount命令

使用权限:系统管理者或/etc/fstab中允许的使用者

使用方式:

mount [-hV]

mount-a [-fFnrsvw] [-t vfstype]

mount [-fnrsvw] [-o options [,...]] device| dir

mount [-fnrsvw] [-t vfstype] [-o options] device dir

进目录创建一个快捷方式吧然后在hl2.exe快捷方式的属性里目标里添加-steam-game portal然后应该可以了

2.SteamEmu.ini文件出现问题,用种子里的Portal.FIX-Unleashed文件夹里压缩包内的文件替换

阅读剩余
THE END