linux rootfs는 Linux의 루트 파일 시스템을 나타냅니다. 루트 파일 시스템은 커널이 시작될 때 마운트되는 첫 번째 파일 시스템입니다. 커널 코드 이미지 파일은 루트 파일 시스템에 저장됩니다. 루트 파일 시스템이 마운트된 후 일부 기본 초기화 스크립트 및 서비스가 실행을 위해 메모리에 로드됩니다.
이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.
Linux rootfs란 무엇인가요?
Linux의 루트 파일 시스템(rootfs의 원리와 소개)
1. 파일 시스템이란 무엇입니까
파일 시스템은 운영 체제에서 장치를 명시적으로 저장하는 데 사용됩니다(일반적으로 디스크뿐만 아니라 NAND 플래시 기반 SSD(Solid State Drive) 또는 파티션에 있는 파일의 방법 및 데이터 구조, 즉 저장 장치의 파일을 구성하는 방법입니다. 운영 체제에서 파일 정보를 관리하고 저장하는 소프트웨어 조직을 파일 관리 시스템, 줄여서 파일 시스템이라고 합니다. 파일 시스템은 파일 시스템 인터페이스, 객체 운영 및 관리를 위한 소프트웨어 모음, 객체 및 속성의 세 부분으로 구성됩니다. 시스템 관점에서 볼 때, 파일 시스템은 파일 저장 장치의 공간을 구성 및 할당하고, 파일 저장을 담당하며, 저장된 파일을 보호하고 검색하는 시스템이다. 특히 사용자를 위한 파일 생성, 파일 저장, 읽기, 수정 및 덤프, 파일 액세스 제어, 사용자가 더 이상 파일을 사용하지 않을 때 파일 취소 등을 담당합니다.
커널은 Linux의 핵심이지만 파일은 사용자가 운영 체제와 상호 작용하는 데 사용하는 주요 도구입니다. 이는 UNIX 전통에서 파일 I/O 메커니즘을 사용하여 하드웨어 장치와 데이터 파일을 관리하는 Linux의 경우 특히 그렇습니다.
루트 파일 시스템은 커널이 시작될 때 가장 먼저 마운트되는 파일 시스템입니다 루트 파일 시스템에는 커널 코드 이미지 파일이 저장되며, 시스템 부팅 프로그램이 실행됩니다. 루트 파일 시스템이 마운트된 후 일부 기본 초기화 스크립트와 서비스가 메모리에 로드되어 실행됩니다.
루트 파일 시스템이 앞에 "루트"를 추가하는 이유는 이것이 다른 파일 시스템을 로드하기 위한 "루트"임을 나타냅니다. 루트, 다른 파일 시스템도 로드할 수 있는 방법이 없습니다.
루트 파일 시스템에는 시스템 시작에 필요한 디렉터리와 키 파일은 물론 다른 파일 시스템을 마운트하는 데 필요한 파일도 포함되어 있습니다. 예:
init 프로세스의 애플리케이션은 루트 파일 시스템에서 실행되어야 합니다.
루트 파일 시스템은 루트 디렉터리 "/"를 제공합니다.
파티션을 마운트할 때 Linux가 의존하는 정보는 루트 파일 시스템에 저장됩니다. /etc/fstab 파일 중간;
ls, cd 및 기타 명령과 같은 쉘 명령 프로그램은 루트 파일 시스템에서 실행되어야 합니다.
간단히 말해서 Linux 시스템의 경우 커널 자체만 작동할 수 없으며 rootfs(구성; etc 디렉토리의 파일, /bin /sbin 및 기타 디렉토리의 쉘 명령, /lib 디렉토리의 라이브러리 파일 등)이 함께 작동할 수 있습니다.
Linux가 시작되면 가장 먼저 마운트해야 하는 것은 루트 파일 시스템입니다. 시스템이 지정된 장치에서 루트 파일 시스템을 마운트할 수 없는 경우 시스템은 오류를 발생시키고 시작을 종료합니다. 성공하면 다른 파일 시스템을 자동 또는 수동으로 마운트할 수 있습니다. 따라서 한 시스템에 서로 다른 파일 시스템이 동시에 존재할 수 있습니다. Linux에서 파일 시스템을 저장 장치와 연결하는 프로세스를 마운팅이라고 합니다. 현재 파일 시스템 계층(루트)에 파일 시스템을 연결하려면 mount 명령을 사용합니다. 마운트를 수행할 때 파일 시스템 유형, 파일 시스템 및 마운트 지점을 제공하십시오. 루트 파일 시스템이 루트 디렉터리의 "/"에 마운트된 후 루트 디렉터리에는 루트 파일 시스템의 다양한 디렉터리, 파일: /bin /sbin /mnt 등이 있고 다른 파티션을 /에 마운트합니다. mnt 디렉토리. /mnt 디렉토리에는 이 파티션의 다양한 디렉토리와 파일이 있습니다.
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);
kernel_init을 실행하기 전에 Roofs 파일 시스템이 설정됩니다.
1. 루트 디렉터리의 이름은 "/"로 설정됩니다.
2. vfsmount의 루트 디렉터리는
3. vfsmount의 루트 디렉터리는 다음과 같습니다. 파일 마운트 지점이 자신을 가리킵니다.
5. vfsmount에서 상위 파일 시스템의 vfsmount를 자신으로 설정합니다.
/etc/:存储重要的配置文件。 /bin/:存储常用且开机时必须用到的执行文件。 /sbin/:存储着开机过程中所需的系统执行文件。 /lib/:存储/bin/及/sbin/的执行文件所需的链接库,以及Linux的内核模块。 /dev/:存储设备文件。
/bin 디렉터리
이 디렉터리에는 모든 사용자가 사용할 수 있는 기본 명령이 저장되어 있으며, 이러한 명령은 다른 파일 시스템을 마운트하기 전에 사용할 수 있으므로 /bin 디렉터리는 루트 파일 시스템과 동일한 파티션에 있어야 합니다.
/bin 디렉토리에서 일반적으로 사용되는 명령에는 cat, chgrp, chmod, cp, ls, sh, kill, mount, umount, mkdir, mknod, test 등이 있습니다. Busybox를 사용하여 루트 파일 시스템을 생성할 때 다음을 생성합니다. bin 디렉토리 아래에서 사용 가능한 명령 중 일부인 실행 파일을 볼 수 있습니다.
/sbin 디렉터리
이 디렉터리에는 시스템 명령, 즉 관리자만 사용할 수 있는 명령이 저장됩니다. 시스템 명령은 /usr/sbin, /usr/local/sbin 디렉터리 및 /sbin 디렉터리에도 저장될 수 있습니다. 기본 시스템 명령은 시스템 시작, 시스템 복구 등에 사용됩니다. /bin 디렉토리와 유사하게 /sbin은 다른 파일 시스템을 마운트하기 전에 사용할 수 있으므로 /sbin 디렉토리는 동일한 파티션에 있어야 합니다. 루트 파일 시스템.
/sbin 디렉토리에서 일반적으로 사용되는 명령에는 shutdown, 재부팅, fdisk, fsck 등이 있습니다. 로컬 사용자가 설치한 시스템 명령은 /usr/local/sbin 디렉토리에 있습니다.
/dev 디렉토리
이 디렉토리에는 장치 파일이 저장됩니다. Linux 시스템에서는 장치 파일을 읽고 쓰는 방식으로 다양한 장치에 액세스합니다. 특정 하드웨어. 예를 들어 직렬 포트 0은 "dev/ttySAC0" 파일을 통해 동작할 수 있고, MTD 장치의 두 번째 파티션은 "/dev/mtdblock1"을 통해 접근할 수 있다.
/etc 디렉토리
이 디렉토리에는 다양한 구성 파일이 저장됩니다. PC의 Linux 시스템의 경우 /etc 디렉토리에 많은 파일과 디렉토리가 있으며 이러한 디렉토리 파일은 시스템의 모든 것에 의존합니다. 해당 프로그램에 구성 파일이 필요한지 여부에 따라 달라집니다. 임베디드 시스템에서는 이러한 문제를 크게 줄일 수 있습니다.
/lib 디렉토리
공유 라이브러리와 로드 가능한(드라이버)이 이 디렉토리에 저장됩니다. 공유 라이브러리는 시스템을 시작하는 데 사용됩니다. /bin /sbin 디렉토리에 있는 프로그램과 같이 루트 파일 시스템에서 실행 가능한 프로그램을 실행합니다.
/home 디렉토리
사용자 디렉토리는 선택 사항입니다. 모든 일반 사용자의 경우 /home 디렉토리에 사용자 관련 구성 파일을 저장하는 사용자 이름을 딴 하위 디렉토리가 있습니다.
/root 디렉토리
이에 따라 일반 사용자의 디렉토리는 /home 아래의 하위 디렉토리입니다.
/usr 디렉터리
/usr 디렉터리의 내용은 다른 파티션에 저장한 후 시스템 시작 후 루트 파일 시스템의 /usr 디렉터리에 마운트할 수 있습니다. 여기에는 공유, 읽기 전용 프로그램 및 데이터가 저장됩니다. 이는 /usr 디렉토리의 내용이 여러 호스트 간에 공유될 수 있으며 이는 주로 FHS 표준을 준수함을 보여줍니다. /usr에 있는 파일은 읽기 전용이어야 하며 다른 호스트와 관련되어야 하며 변수 파일은 /var와 같은 다른 디렉터리에 저장되어야 합니다. /usr 디렉토리는 임베디드 시스템에서 줄어들 수 있습니다.
/var 디렉터리
/usr 디렉터리와 달리 /var 디렉터리에는 스풀 디렉터리(메일, 뉴스), 로그 파일, 임시 파일 등의 변수 데이터가 저장됩니다.
/proc 디렉토리
proc 파일 시스템의 마운트 지점으로 자주 사용되는 빈 디렉토리입니다. proc 파일 시스템은 실제 저장 장치가 없습니다. 커널에 의해 생성된 파일은 시스템의 실행 상태를 나타내는 데 사용되며 파일 제어 시스템을 작동할 수도 있습니다.
/mnt 디렉토리
는 파일 시스템을 임시로 마운트하는 데 사용되는 마운트 지점입니다. 일반적으로 빈 디렉토리(예: /mnt/cdram /mnt/hda1)를 만들 수도 있습니다. CD 및 하드 드라이브를 임시로 마운트하는 데 사용됩니다.
/tmp 디렉토리
는 임시 파일을 저장하는 데 사용되며 일반적으로 빈 디렉토리입니다. 임시 파일을 생성해야 하는 일부 프로그램은 /tmp 디렉토리를 사용하므로 /tmp 디렉토리가 존재하고 액세스 가능해야 합니다.
관련 추천: "Linux 비디오 튜토리얼"
위 내용은 리눅스 rootfs 란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!