這篇文章主要介紹“l(fā)inux rootfs指的是什么”,在日常操作中,相信很多人在linux rootfs指的是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”linux rootfs指的是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁視覺設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、成都全網(wǎng)營銷推廣、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、移動(dòng)網(wǎng)站建設(shè)、微商城、網(wǎng)站托管及網(wǎng)站維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都門簾行業(yè)客戶提供了網(wǎng)站推廣服務(wù)。
linux rootfs是指linux中的根文件系統(tǒng);根文件系統(tǒng)首先是內(nèi)核啟動(dòng)時(shí)所mount的第一個(gè)文件系統(tǒng),內(nèi)核代碼映像文件保存在根文件系統(tǒng)中,而系統(tǒng)引導(dǎo)啟動(dòng)程序會(huì)在根文件系統(tǒng)掛載之后從中把一些基本的初始化腳本和服務(wù)等加載到內(nèi)存中去運(yùn)行。
一、什么是文件系統(tǒng)
文件系統(tǒng)是操作系統(tǒng)用于明確存儲(chǔ)設(shè)備(常見的是磁盤,也有基于NAND Flash的固態(tài)硬盤)或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu);即在存儲(chǔ)設(shè)備上組織文件的方法。操作系統(tǒng)中負(fù)責(zé)管理和存儲(chǔ)文件信息的軟件機(jī)構(gòu)稱為文件管理系統(tǒng),簡稱文件系統(tǒng)。文件系統(tǒng)由三部分組成:文件系統(tǒng)的接口,對對象操作和管理的軟件集合,對象及屬性。從系統(tǒng)角度來看,文件系統(tǒng)是對文件存儲(chǔ)設(shè)備的空間進(jìn)行組織和分配,負(fù)責(zé)文件存儲(chǔ)并對存入的文件進(jìn)行保護(hù)和檢索的系統(tǒng)。具體地說,它負(fù)責(zé)為用戶建立文件,存入、讀出、修改、轉(zhuǎn)儲(chǔ)文件,控制文件的存取,當(dāng)用戶不再使用時(shí)撤銷文件等。
盡管內(nèi)核是linux的核心,但文件卻是用戶與操作系統(tǒng)交互所采用的主要工具。這對linux來說尤其如此,這是因?yàn)樵赨NIX傳統(tǒng)中,它使用文件I/O機(jī)制管理硬件設(shè)備和數(shù)據(jù)文件。
根文件系統(tǒng)首先是內(nèi)核啟動(dòng)時(shí)所mount的第一個(gè)文件系統(tǒng),內(nèi)核代碼映像文件保存在根文件系統(tǒng)中,而系統(tǒng)引導(dǎo)啟動(dòng)程序會(huì)在根文件系統(tǒng)掛載之后從中把一些基本的初始化腳本和服務(wù)等加載到內(nèi)存中去運(yùn)行。
根文件系統(tǒng)之所以在前面加一個(gè)”根“,說明它是加載其它文件系統(tǒng)的”根“,那么如果沒有這個(gè)根,其它的文件系統(tǒng)也就沒有辦法進(jìn)行加載的。
根文件系統(tǒng)包含系統(tǒng)啟動(dòng)時(shí)所必須的目錄和關(guān)鍵性的文件,以及使其他文件系統(tǒng)得以掛載(mount)所必要的文件。例如:
init進(jìn)程的應(yīng)用程序必須運(yùn)行在根文件系統(tǒng)上;
根文件系統(tǒng)提供了根目錄“/”;
linux掛載分區(qū)時(shí)所依賴的信息存放于根文件系統(tǒng)/etc/fstab這個(gè)文件中;
shell命令程序必須運(yùn)行在根文件系統(tǒng)上,譬如ls、cd等命令;
總之:一套linux體系,只有內(nèi)核本身是不能工作的,必須要rootfs(上的etc目錄下的配置文件、/bin /sbin等目錄下的shell命令,還有/lib目錄下的庫文件等···)相配合才能工作。
Linux啟動(dòng)時(shí),第一個(gè)必須掛載的是根文件系統(tǒng);若系統(tǒng)不能從指定設(shè)備上掛載根文件系統(tǒng),則系統(tǒng)會(huì)出錯(cuò)而退出啟動(dòng)。成功之后可以自動(dòng)或手動(dòng)掛載其他的文件系統(tǒng)。因此,一個(gè)系統(tǒng)中可以同時(shí)存在不同的文件系統(tǒng)。在 Linux 中將一個(gè)文件系統(tǒng)與一個(gè)存儲(chǔ)設(shè)備關(guān)聯(lián)起來的過程稱為掛載(mount)。使用 mount 命令將一個(gè)文件系統(tǒng)附著到當(dāng)前文件系統(tǒng)層次結(jié)構(gòu)中(根)。在執(zhí)行掛裝時(shí),要提供文件系統(tǒng)類型、文件系統(tǒng)和一個(gè)掛裝點(diǎn)。根文件系統(tǒng)被掛載到根目錄下“/”上后,在根目錄下就有根文件系統(tǒng)的各個(gè)目錄,文件:/bin /sbin /mnt等,再將其他分區(qū)掛接到/mnt目錄上,/mnt目錄下就有這個(gè)分區(qū)的各個(gè)目錄和文件。
init/main.c-> start_kernel()->vfs_caches_init(totalram_pages)–> mnt_init()–> /* sysfs用來記錄和展示linux驅(qū)動(dòng)模型,sysfs先于rootfs掛載是為全面展示linux驅(qū)動(dòng)模型做好準(zhǔn)備 / / mnt_init()調(diào)用sysfs_init()注冊并掛載sysfs文件系統(tǒng),然后調(diào)用kobject_create_and_add()創(chuàng)建fs目錄 */ sysfs_init(); /* init_rootfs()注冊rootfs,然后調(diào)用init_mount_tree()掛載rootfs */ init_rootfs(); init_mount_tree(); 1、sysfs文件系統(tǒng)目前還沒有掛載到rootfs的某個(gè)掛載點(diǎn)上,后續(xù)init程序會(huì)把sysfs掛載到rootfs的sys掛載點(diǎn)上; 2、rootfs是基于內(nèi)存的文件系統(tǒng),所有操作都在內(nèi)存中完成;也沒有實(shí)際的存儲(chǔ)設(shè)備,所以不需要設(shè)備驅(qū)動(dòng)程序的參與?;谝陨显?,linux在啟動(dòng)階段使用rootfs文件系統(tǒng),當(dāng)磁盤驅(qū)動(dòng)程序和磁盤文件系統(tǒng)成功加載后,linux系統(tǒng)會(huì)將系統(tǒng)根目錄從rootfs切換到磁盤文件系統(tǒng)。 start_kernel vfs_caches_init mnt_init init_rootfs注冊rootfs文件系統(tǒng) init_mount_tree 掛載rootfs文件系統(tǒng) vfs_kern_mount mount_fs type->mount其實(shí)是rootfs_mount mount_nodev fill_super 其實(shí)是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);
在執(zhí)行kernel_init之前,會(huì)建立roofs文件系統(tǒng)。
1.處設(shè)置了根目錄的名字為“/”;
2.處設(shè)置了vfsmount中的root目錄;
3.處設(shè)置了vfsmount中的超級(jí)塊;
4.處設(shè)置了vfsmount中的文件掛載點(diǎn),指向了自己;
5.處設(shè)置了vfsmount中的父文件系統(tǒng)的vfsmount為自己;
正常來說,根文件系統(tǒng)至少包括以下目錄:
/etc/:存儲(chǔ)重要的配置文件。 /bin/:存儲(chǔ)常用且開機(jī)時(shí)必須用到的執(zhí)行文件。 /sbin/:存儲(chǔ)著開機(jī)過程中所需的系統(tǒng)執(zhí)行文件。 /lib/:存儲(chǔ)/bin/及/sbin/的執(zhí)行文件所需的鏈接庫,以及Linux的內(nèi)核模塊。 /dev/:存儲(chǔ)設(shè)備文件。
Linux文件系統(tǒng)中一般有如下幾個(gè)目錄:
/bin目錄
該目錄下存放所有用戶都可以使用的、基本的命令,這些命令在掛接其它文件系統(tǒng)之前就可以使用,所以/bin目錄必須和根文件系統(tǒng)在同一個(gè)分區(qū)中。
/bin目錄下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,mknod,test等,我們在利用Busybox制作根文件系統(tǒng)時(shí),在生成的bin目錄下,可以看到一些可執(zhí)行的文件,也就是可用的一些命令。
/sbin 目錄
該目錄下存放系統(tǒng)命令,即只有管理員能夠使用的命令,系統(tǒng)命令還可以存放在/usr/sbin,/usr/local/sbin目錄下,/sbin目錄中存放的是基本的系統(tǒng)命令,它們用于啟動(dòng)系統(tǒng),修復(fù)系統(tǒng)等,與/bin目錄相似,在掛接其他文件系統(tǒng)之前就可以使用/sbin,所以/sbin目錄必須和根文件系統(tǒng)在同一個(gè)分區(qū)中。
/sbin目錄下常用的命令有:shutdown,reboot,fdisk,fsck等,本地用戶自己安裝的系統(tǒng)命令放在/usr/local/sbin目錄下。
/dev目錄
該目錄下存放的是設(shè)備文件,設(shè)備文件是Linux中特有的文件類型,在Linux系統(tǒng)下,以文件的方式訪問各種設(shè)備,即通過讀寫某個(gè)設(shè)備文件操作某個(gè)具體硬件。比如通過"dev/ttySAC0"文件可以操作串口0,通過"/dev/mtdblock1"可以訪問MTD設(shè)備的第2個(gè)分區(qū)。
/etc目錄
該目錄下存放著各種配置文件,對于PC上的Linux系統(tǒng),/etc目錄下的文件和目錄非常多,這些目錄文件是可選的,它們依賴于系統(tǒng)中所擁有的應(yīng)用程序,依賴于這些程序是否需要配置文件。在嵌入式系統(tǒng)中,這些內(nèi)容可以大為精減。
/lib目錄
該目錄下存放共享庫和可加載(驅(qū)動(dòng)程序),共享庫用于啟動(dòng)系統(tǒng)。運(yùn)行根文件系統(tǒng)中的可執(zhí)行程序,比如:/bin /sbin 目錄下的程序。
/home目錄
用戶目錄,它是可選的,對于每個(gè)普通用戶,在/home目錄下都有一個(gè)以用戶名命名的子目錄,里面存放用戶相關(guān)的配置文件。
/root目錄
根用戶的目錄,與此對應(yīng),普通用戶的目錄是/home下的某個(gè)子目錄。
/usr目錄
/usr目錄的內(nèi)容可以存在另一個(gè)分區(qū)中,在系統(tǒng)啟動(dòng)后再掛接到根文件系統(tǒng)中的/usr目錄下。里面存放的是共享、只讀的程序和數(shù)據(jù),這表明/usr目錄下的內(nèi)容可以在多個(gè)主機(jī)間共享,這些主要也符合FHS標(biāo)準(zhǔn)的。/usr中的文件應(yīng)該是只讀的,其他主機(jī)相關(guān)的,可變的文件應(yīng)該保存在其他目錄下,比如/var。/usr目錄在嵌入式中可以精減。
/var目錄
與/usr目錄相反,/var目錄中存放可變的數(shù)據(jù),比如spool目錄(mail,news),log文件,臨時(shí)文件。
/proc目錄
這是一個(gè)空目錄,常作為proc文件系統(tǒng)的掛接點(diǎn),proc文件系統(tǒng)是個(gè)虛擬的文件系統(tǒng),它沒有實(shí)際的存儲(chǔ)設(shè)備,里面的目錄,文件都是由內(nèi)核臨時(shí)生成的,用來表示系統(tǒng)的運(yùn)行狀態(tài),也可以操作其中的文件控制系統(tǒng)。
/mnt目錄
用于臨時(shí)掛載某個(gè)文件系統(tǒng)的掛接點(diǎn),通常是空目錄,也可以在里面創(chuàng)建一引起空的子目錄,比如/mnt/cdram /mnt/hda1 。用來臨時(shí)掛載光盤、硬盤。
/tmp目錄
用于存放臨時(shí)文件,通常是空目錄,一些需要生成臨時(shí)文件的程序用到的/tmp目錄下,所以/tmp目錄必須存在并可以訪問。
到此,關(guān)于“l(fā)inux rootfs指的是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!