linux rootfs bezieht sich auf das Root-Dateisystem in Linux. Das Root-Dateisystem ist das erste Dateisystem, das beim Start des Kernels gemountet wird. Die Kernel-Code-Image-Datei wird im Root-Dateisystem gespeichert Root-Datei Nachdem das System gemountet ist, werden einige grundlegende Initialisierungsskripte und -dienste zur Ausführung in den Speicher geladen.
Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.
Was ist Linux RootFS?
Das Root-Dateisystem in Linux (das Prinzip und die Einführung von rootfs)
1. Was ist das Dateisystem
Das Dateisystem wird vom Betriebssystem verwendet, um Geräte explizit zu speichern (üblicherweise). Festplatten, aber auch die Methode und Datenstruktur von Dateien auf einem NAND-Flash-basierten Solid-State-Laufwerk oder einer Partition, d. h. die Methode zum Organisieren von Dateien auf einem Speichergerät. Die Softwareorganisation, die für die Verwaltung und Speicherung von Dateiinformationen im Betriebssystem verantwortlich ist, wird als Dateiverwaltungssystem oder kurz Dateisystem bezeichnet. Das Dateisystem besteht aus drei Teilen: der Dateisystemschnittstelle, der Softwaresammlung für Objektbetrieb und -verwaltung sowie den Objekten und Attributen. Aus Systemsicht ist ein Dateisystem ein System, das den Speicherplatz von Dateispeichergeräten organisiert und zuweist, für die Dateispeicherung verantwortlich ist und gespeicherte Dateien schützt und abruft. Insbesondere ist es dafür verantwortlich, Dateien für Benutzer zu erstellen, Dateien zu speichern, zu lesen, zu ändern und zu sichern, den Dateizugriff zu kontrollieren und Dateien zu widerrufen, wenn Benutzer sie nicht mehr verwenden.
Obwohl der Kernel der Kern von Linux ist, sind Dateien das Hauptwerkzeug, mit dem Benutzer mit dem Betriebssystem interagieren. Dies gilt insbesondere für Linux, das in der UNIX-Tradition Datei-I/O-Mechanismen zur Verwaltung von Hardwaregeräten und Datendateien verwendet.
3. Warum ist das Root-Dateisystem so wichtig? Der Grund, warum das Root-Dateisystem ein „Root“ davor einfügt, zeigt, dass es das „Root“ zum Laden anderer Dateisysteme ist root, andere Dateisysteme werden es auch tun. Es gibt keine Möglichkeit, es zu laden.
Das Root-Dateisystem enthält Verzeichnisse und Schlüsseldateien, die für den Systemstart erforderlich sind, sowie Dateien, die zum Mounten anderer Dateisysteme erforderlich sind. Zum Beispiel: Die Anwendung des Init-Prozesses muss im Root-Dateisystem ausgeführt werden. Das Root-Dateisystem stellt das Root-Verzeichnis „/“ bereit. Die Informationen, auf die Linux beim Mounten einer Partition angewiesen ist, werden im Root-Dateisystem gespeichert /etc/fstab-Datei Medium;
Das Shell-Befehlsprogramm muss auf dem Root-Dateisystem ausgeführt werden, z. B. ls, cd und andere Befehle.Kurz gesagt: Bei einem Linux-System kann nur der Kernel selbst nicht funktionieren, und die Rootfs (Konfiguration). Datei im Verzeichnis etc, Shell-Befehle in /bin /sbin und anderen Verzeichnissen sowie Bibliotheksdateien im Verzeichnis /lib usw.) können zusammenarbeiten.
Wenn Linux startet, muss als Erstes das Root-Dateisystem gemountet werden. Wenn das System das Root-Dateisystem nicht vom angegebenen Gerät mounten kann, macht das System einen Fehler und bricht den Start ab. Nach Erfolg können weitere Dateisysteme automatisch oder manuell gemountet werden. Daher können in einem System gleichzeitig verschiedene Dateisysteme existieren. Der Vorgang des Zuordnens eines Dateisystems zu einem Speichergerät wird unter Linux als Mounten bezeichnet. Verwenden Sie den Befehl „mount“, um ein Dateisystem an die aktuelle Dateisystemhierarchie (Root) anzuhängen. Geben Sie beim Mounten den Dateisystemtyp, das Dateisystem und einen Mountpunkt an. Nachdem das Root-Dateisystem auf „/“ im Root-Verzeichnis gemountet wurde, gibt es im Root-Verzeichnis verschiedene Verzeichnisse des Root-Dateisystems, Dateien: /bin /sbin /mnt usw., und mounten Sie dann andere Partitionen im / mnt-Verzeichnis: Im Verzeichnis /mnt befinden sich verschiedene Verzeichnisse und Dateien dieser Partition.
4. So mounten Sie das Root-Dateisystem im Kernel
init/main.c-> start_kernel()->vfs_caches_init(totalram_pages)–> mnt_init()–> /* sysfs用来记录和展示linux驱动模型,sysfs先于rootfs挂载是为全面展示linux驱动模型做好准备 / / mnt_init()调用sysfs_init()注册并挂载sysfs文件系统,然后调用kobject_create_and_add()创建fs目录 */ sysfs_init(); /* init_rootfs()注册rootfs,然后调用init_mount_tree()挂载rootfs */ init_rootfs(); init_mount_tree(); 1、sysfs文件系统目前还没有挂载到rootfs的某个挂载点上,后续init程序会把sysfs挂载到rootfs的sys挂载点上; 2、rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。 start_kernel vfs_caches_init mnt_init init_rootfs注册rootfs文件系统 init_mount_tree 挂载rootfs文件系统 vfs_kern_mount mount_fs type->mount其实是rootfs_mount mount_nodev fill_super 其实是ramfs_fill_super inode = ramfs_get_inode(sb, NULL, S_IFDIR | fsi->mount_opts.mode, 0); sb->s_root = d_make_root(inode); static const struct qstr name = QSTR_INIT("/", 1);[1*] __d_alloc(root_inode->i_sb, &name); … mnt->mnt.mnt_root = root;[2*] mnt->mnt.mnt_sb = root->d_sb;[3*] mnt->mnt_mountpoint = mnt->mnt.mnt_root;[4*] mnt->mnt_parent = mnt;[5*] root.mnt = mnt; root.dentry = mnt->mnt_root; mnt->mnt_flags |= MNT_LOCKED; set_fs_pwd(current->fs, &root); set_fs_root(current->fs, &root); … rest_init kernel_thread(kernel_init, NULL, CLONE_FS);
Normalerweise umfasst das Root-Dateisystem mindestens; das folgende Verzeichnis:
/etc/:存储重要的配置文件。 /bin/:存储常用且开机时必须用到的执行文件。 /sbin/:存储着开机过程中所需的系统执行文件。 /lib/:存储/bin/及/sbin/的执行文件所需的链接库,以及Linux的内核模块。 /dev/:存储设备文件。
/bin-Verzeichnis
In diesem Verzeichnis werden grundlegende Befehle gespeichert, die von allen Benutzern verwendet werden können. Diese Befehle können vor dem Mounten anderer Dateisysteme verwendet werden. Daher muss sich das Verzeichnis /bin in derselben Partition wie das Root-Dateisystem befinden.
Zu den häufig verwendeten Befehlen im Verzeichnis /bin gehören: cat, chgrp, chmod, cp, ls, sh, kill, mount, umount, mkdir, mknod, test usw. Wenn wir Busybox zum Erstellen des Root-Dateisystems verwenden, erstellen wir ein bin-Verzeichnis im generierten Root-Dateisystem. Unten sehen Sie einige ausführbare Dateien, bei denen es sich um einige der verfügbaren Befehle handelt.
/sbin-Verzeichnis
In diesem Verzeichnis werden Systembefehle gespeichert, d. h. Befehle, die nur Administratoren verwenden können. Systembefehle können auch in den Verzeichnissen /usr/sbin, /usr/local/sbin und /sbin gespeichert werden sind grundlegende Systembefehle. Sie werden zum Starten des Systems, zum Reparieren des Systems usw. verwendet. Ähnlich wie das Verzeichnis /bin kann /sbin vor dem Mounten anderer Dateisysteme verwendet werden, daher muss sich das Verzeichnis /sbin in derselben Partition wie das befinden Root-Dateisystem.
Zu den häufig verwendeten Befehlen im Verzeichnis /sbin gehören: Herunterfahren, Neustart, fdisk, fsck usw. Von lokalen Benutzern installierte Systembefehle werden im Verzeichnis /usr/local/sbin abgelegt.
/dev-Verzeichnis
In diesem Verzeichnis werden Gerätedateien gespeichert. Gerätedateien sind ein einzigartiger Dateityp unter Linux. Auf verschiedene Geräte wird in Form von Dateien zugegriffen, d. h. durch Lesen und Schreiben einer Gerätedatei. ein bestimmtes Stück Hardware. Beispielsweise kann die serielle Schnittstelle 0 über die Datei „dev/ttySAC0“ bedient werden, und auf die zweite Partition des MTD-Geräts kann über „/dev/mtdblock1“ zugegriffen werden.
/etc-Verzeichnis
Für Linux-Systeme auf dem PC gibt es viele Dateien und Verzeichnisse im Verzeichnis /etc, die von allem im System abhängen Anwendungen, abhängig davon, ob diese Programme Konfigurationsdateien erfordern. In eingebetteten Systemen können diese stark reduziert werden.
/lib-Verzeichnis
Gemeinsam genutzte Bibliotheken und ladbare Dateien (Treiber) werden zum Starten des Systems gespeichert. Führen Sie ausführbare Programme im Root-Dateisystem aus, beispielsweise Programme im Verzeichnis /bin /sbin.
/home-Verzeichnis
Benutzerverzeichnis, es ist optional. Für jeden normalen Benutzer gibt es im Verzeichnis /home ein Unterverzeichnis, das nach dem Benutzernamen benannt ist und benutzerbezogene Konfigurationsdateien speichert.
/root-Verzeichnis
Das Verzeichnis des Root-Benutzers ist entsprechend ein Unterverzeichnis unter /home.
/usr-Verzeichnis
Der Inhalt des /usr-Verzeichnisses kann in einer anderen Partition gespeichert und dann nach dem Systemstart im /usr-Verzeichnis im Root-Dateisystem bereitgestellt werden. Es speichert gemeinsam genutzte, schreibgeschützte Programme und Daten, was zeigt, dass der Inhalt des Verzeichnisses /usr von mehreren Hosts gemeinsam genutzt werden kann und diese hauptsächlich den FHS-Standards entsprechen. Dateien in /usr sollten schreibgeschützt sein und sich auf andere Hosts beziehen, und variable Dateien sollten in anderen Verzeichnissen wie /var gespeichert werden. Das Verzeichnis /usr kann in eingebetteten Systemen reduziert werden.
/var-Verzeichnis
Im Gegensatz zum /usr-Verzeichnis speichert das /var-Verzeichnis variable Daten wie Spool-Verzeichnisse (Mail, News), Protokolldateien und temporäre Dateien.
/proc-Verzeichnis
Dies ist ein leeres Verzeichnis, das häufig als Einhängepunkt des proc-Dateisystems verwendet wird. Es verfügt über keine tatsächlichen Speichergeräte Wird vom Kernel generiert, zeigt den Betriebsstatus des Systems an und kann auch das Dateisteuerungssystem bedienen.
/mnt-Verzeichnis
ist ein Mount-Punkt, der zum temporären Mounten eines Dateisystems verwendet wird. Es ist normalerweise ein leeres Verzeichnis darin, wie zum Beispiel /mnt/cdram /mnt/hda1. Wird zum vorübergehenden Mounten von CDs und Festplatten verwendet.
/tmp-Verzeichnis
wird zum Speichern temporärer Dateien verwendet, normalerweise ein leeres Verzeichnis. Einige Programme, die temporäre Dateien generieren müssen, verwenden das Verzeichnis /tmp, daher muss das Verzeichnis /tmp vorhanden und zugänglich sein.
Verwandte Empfehlungen: „Linux-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas ist Linux RootFS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!