vfs

http://unix.stackexchange.com/questions/93767/why-cant-i-specify-my-root-fs-with-a-uuid

blkid

partuuid=009009-09

(uuid是需要initramfs中的驱动的,没有的话它认识partuuid,very nice)


up vote 9 down vote

The parameter you have to pass to boot from UUID is PARTUUID. So it should be root=PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e.

The documentation explains why it‘s coming back with unknown-block(0,0):

kernel-parameters.txt:

    root=       [KNL] Root filesystem
            See name_to_dev_t comment in init/do_mounts.c.

init/do_mounts.c:

/*
 *  Convert a name into device number.  We accept the following variants:
 *
 *  1) device number in hexadecimal represents itself
 *  2) /dev/nfs represents Root_NFS (0xff)
 *  3) /dev/<disk_name> represents the device number of disk
 *  4) /dev/<disk_name><decimal> represents the device number
 *         of partition - device number of disk plus the partition number
 *  5) /dev/<disk_name>p<decimal> - same as the above, that form is
 *     used when disk name of partitioned disk ends on a digit.
 *  6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
 *     unique id of a partition if the partition table provides it.
 *     The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
 *     partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
 *     filled hex representation of the 32-bit "NT disk signature", and PP
 *     is a zero-filled hex representation of the 1-based partition number.
 *  7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to
 *     a partition with a known unique id.
 *
 *  If name doesn‘t have fall into the categories above, we return (0,0).
 *  block_class is used to check if something is a disk name. If the disk
 *  name contains slashes, the device name has them replaced with
 *  bangs.
 */

The last bit at the end says that if it cant understand the value, it returns (0,0), hence your error.


shareimprove this answer

answered Oct 6 ‘13 at 5:21

Patrick
27.4k560105

 

    

This is only partially correct. A partition UUID is completely different from the filesystem‘s UUID, so PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e does not work. However, I was able to use PARTUUID=SSSSSSSS-02 (where SSSSSSSS is the NT disk signature shown just before the error message).
– cjm
Oct 6 ‘13 at 5:42
3  

So I guess that the real answer is that the kernel does not support root=UUID, only root=PARTUUID. If you want to use a filesystem UUID, I guess you need an initramfs that can handle mounting filesystems by UUID.
– cjm
Oct 6 ‘13 at 5:48
    

@cjm my grub boots quite happily with root=UUID.
– terdon♦
Oct 6 ‘13 at 14:30
1  

@terdon, I‘ll bet you have an initramfs or initrd. (It could be linked into your kernel instead of being a separate file.)
– cjm
Oct 6 ‘13 at 14:59

add a comment

up vote
7
down vote

Just to clarify UUIDs are the only reliable way for the
kernel to identify hard drives. There are two types: UUID, which is
stored in the filesystem and is not available to the kernel at
boot-time, and PARTUUID, which is stored in the partition table and IS
available at boot time. So you have to use

root=PARTUUID=SSSSSSSS-PP

as /dev/sd?? can change with devices plugged/unplugged.

Don‘t forget to capitalize the hexadecimal number SSSSSSSS-PP you get from blkid!

The more easy to use

root=LABEL=
root=UUID=

only work with an initramfs that fetches these identifiers.

So, if you use a non-empty initramfs, you can have all three! With an empty initramfs, you only have PARTUUID.


shareimprove this answer

edited Aug 22 ‘14 at 16:29

answered Aug 21 ‘14 at 22:37

ineiti
8614

 

    

Mind to explain who is using
the boot=-argument then? I just used this line for an Archlinuxarm
installation that doesn‘t have initrd, and where I can‘t use boot=LABEL
nor boot=UUID.
– ineiti
Aug 21 ‘14 at 22:48
    

You‘re right - I corrected the boot to root, sorry! Hope it makes more sense now.
– ineiti
Aug 21 ‘14 at 22:57
    

Yes. The kernel will interpret a root= flag - but not in the sense i think you mean. There is no such thing as without initramfs - the root= flag points to an initramfs image which the kernel will extract into its own / with cpio. initrd is extinct - and has been since the 2.6 kernel was introduced.
– mikeserv
Aug 21 ‘14 at 23:01
    

My understanding (after one day on the forums of archlinuxarm) is that there is no initrd (or initramfs, but kernel.org/doc/Documentation/kernel-parameters.txt
calls it initrd) on Archlinuxarm. On Ubuntu and such I do give a
pointer to initrd, but (as to my understanding) not on Archlinuxarm.
– ineiti
Aug 22 ‘14 at 6:54
    

Archlinuxarm discussion about NO initrd: archlinuxarm.org/forum/viewtopic.php?f=23&t=6652
– ineiti
Aug 22 ‘14 at 7:18

show 2 more comments

时间: 2024-10-14 15:38:16

vfs的相关文章

虚拟文件系统-VFS

1.什么是虚拟文件系统? OpenCms将所有的资源都存放在数据库中,这些资源的节点共同构成了虚拟文件系统(VFS,Virtual File System).虚拟文件系统可以在传统工作空间中查看. 虚拟文件系统可以看做一个实际的文件系统,它提供实际文件系统中提供的功能: 文件.文件夹的移动.复制.删除. 权限设置. 资源编辑锁定. 资源创建时间.最后修改时间记录. 此外,它还扩展了一些功能: 资源类型定义(不仅限于文件.文件夹). 自定义资源属性. 资源关联. 资源历史记录保存与恢复. 资源移动

VFS四大对象之三 struct dentry

继上一篇文章介绍了inode结构体:继续介绍目录项dentry: 三.dentry结构体 目录项:目录项是描述文件的逻辑属性,只存在于内存中,并没有实际对应的磁盘上的描述,更确切的说是存在于内存的目录项缓存,为了提高查找性能而设计.注意不管是文件夹还是最终的文件,都是属于目录项,所有的目录项在一起构成一颗庞大的目录树.例如:open一个文件/home/xxx/yyy.txt,那么/.home.xxx.yyy.txt都是一个目录项,VFS在查找的时候,根据一层一层的目录项找到对应的每个目录项的in

linux文件系统体系结构 和 虚拟文件系统(VFS)

图 1. Linux 文件系统组件的体系结构 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开.读取.写和关闭)提供用户接口.系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点. VFS 是底层文件系统的主要接口.这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大.有两个针对文件系统对象的缓存(inode 和 dentry).它们缓存最近使用过的文件系统对象. 每个文件系统实

VFS之基本数据结构

文件系统是一种存储和组织计算机中文件数据的一系列抽象数据类型,它们用来实现数据的存储.管理.查看.等功能.在Linux系统中,所有的设备.进程都是以文件的形式存在,字符设备.块设备以及这些设备的驱动均要依靠文件系统来实现,设备管理的基础框架也要以来文件系统(sysfs),所以文件系统在Linux操作系统中担任着重大的作用. 一.VFS介绍 Linux内核通过虚拟文件系统(Virtual File System,VFS)管理文件系统.VFS对所有的文件系统(如Ext3.Ext2等)提供了一个统一的

使用 /proc 文件系统来访问 linux操作系统 内核的内容 &amp;&amp; 虚拟文件系统vfs及proc详解

http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/20130422/366044.html 使用 /proc 文件系统来访问 Linux 内核的内容 这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口 简介: /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux? 内核空间和用户空间之间进行通信.在 /proc 文件系统中,

Linux虚拟文件系统(VFS)学习

虚拟文件系统(Virtual Filesystem)也可称之为虚拟文件系统转换(Virtual Filesystem Switch),是一个内核软件层,用来处理与Unix标准文件系统相关的所有系统调用.其健壮性表现在能为各种文件系统提供一个通用的接口. 通用文件系统模型 VFS所隐含的主要思想在于引入一个通用的文件系统模型(common file model),这个模型能够表示所有支持的文件系统.在通用文件模型中,每个目录被看做一个文件,可以包含若干文件和其他的子目录. 通用文件模型由下列对象类

VFS dup ,dup2

Linux支持各种各样的文件系统格式,如ext2.ext3.reiserfs.FAT.NTFS.iso9660等等,不同的磁盘分区.光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用ls命令看起来是一样的,读写操作用起来也都是一样的,这是怎么做到的呢?Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件.目录.读写访问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象

VFS文件系统结构分析

本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载.但转载请保持文档的完整性,并注明原作者及原链接.内容可任意使用,但对因使用该内容引起的后果不做任何保证. 作者:[email protected] 博客:fireaxe.blog.chinaunix.net VFS是Linux非常核心的一个概念,linux下的大部分操作都要用到VFS的相关功能.这里从使用者的角度,对VFS进行了简单说明.使用者不但需要知道Linux下有哪些文件操作的函数,还需要对VFS的结构有一个比较清晰的了解,才能

linux VFS 内核数据结构

<strong>简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp.</strong> 文件描述符的操作(如: open)返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用;而流(如: fopen)返回的是一个FILE结构指针, FILE结构是包含有文件描述符的,FILE结构函数可以看作是对fd直接操作的系统调用的封装, 它的优点是带有I

zabbix vfs.fs.discovery过滤

vfs.fs.discovery过滤 zabbix对文件系统的监控是通过LLD实现的,zabbix首先通过Discovery rule发现所有的文件系统名称和类型 利用vfs.fs.discovery 自动发现并监控磁盘,然后通过正则表达式过滤不需要的文件系统 zabbix_get -s 127.0.0.1 -k vfs.fs.discovery    //监测出本地的所有文件系统名称和类型 然后通过正则表达式进行过滤不需要的文件系统 1.先定义正则表达式 管理--一般--正则表达式 定义正则表