> 운영 및 유지보수 > 리눅스 운영 및 유지 관리 > 리눅스 rootfs 란 무엇입니까?

리눅스 rootfs 란 무엇입니까?

藏色散人
풀어 주다: 2023-04-19 10:11:25
원래의
3371명이 탐색했습니다.

linux rootfs는 Linux의 루트 파일 시스템을 나타냅니다. 루트 파일 시스템은 커널이 시작될 때 마운트되는 첫 번째 파일 시스템입니다. 커널 코드 이미지 파일은 루트 파일 시스템에 저장됩니다. 루트 파일 시스템이 마운트된 후 일부 기본 초기화 스크립트 및 서비스가 실행을 위해 메모리에 로드됩니다.

리눅스 rootfs 란 무엇입니까?

이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.

Linux rootfs란 무엇인가요?

Linux의 루트 파일 시스템(rootfs의 원리와 소개)

1. 파일 시스템이란 무엇입니까

파일 시스템은 운영 체제에서 장치를 명시적으로 저장하는 데 사용됩니다(일반적으로 디스크뿐만 아니라 NAND 플래시 기반 SSD(Solid State Drive) 또는 파티션에 있는 파일의 방법 및 데이터 구조, 즉 저장 장치의 파일을 구성하는 방법입니다. 운영 체제에서 파일 정보를 관리하고 저장하는 소프트웨어 조직을 파일 관리 시스템, 줄여서 파일 시스템이라고 합니다. 파일 시스템은 파일 시스템 인터페이스, 객체 운영 및 관리를 위한 소프트웨어 모음, 객체 및 속성의 세 부분으로 구성됩니다. 시스템 관점에서 볼 때, 파일 시스템은 파일 저장 장치의 공간을 구성 및 할당하고, 파일 저장을 담당하며, 저장된 파일을 보호하고 검색하는 시스템이다. 특히 사용자를 위한 파일 생성, 파일 저장, 읽기, 수정 및 덤프, 파일 액세스 제어, 사용자가 더 이상 파일을 사용하지 않을 때 파일 취소 등을 담당합니다.

커널은 Linux의 핵심이지만 파일은 사용자가 운영 체제와 상호 작용하는 데 사용하는 주요 도구입니다. 이는 UNIX 전통에서 파일 I/O 메커니즘을 사용하여 하드웨어 장치와 데이터 파일을 관리하는 Linux의 경우 특히 그렇습니다.

2. 루트 파일 시스템이란

루트 파일 시스템은 커널이 시작될 때 가장 먼저 마운트되는 파일 시스템입니다 루트 파일 시스템에는 커널 코드 이미지 파일이 저장되며, 시스템 부팅 프로그램이 실행됩니다. 루트 파일 시스템이 마운트된 후 일부 기본 초기화 스크립트와 서비스가 메모리에 로드되어 실행됩니다.

3. 루트 파일 시스템이 왜 그렇게 중요한가요?

루트 파일 시스템이 앞에 "루트"를 추가하는 이유는 이것이 다른 파일 시스템을 로드하기 위한 "루트"임을 나타냅니다. 루트, 다른 파일 시스템도 로드할 수 있는 방법이 없습니다.

루트 파일 시스템에는 시스템 시작에 필요한 디렉터리와 키 파일은 물론 다른 파일 시스템을 마운트하는 데 필요한 파일도 포함되어 있습니다. 예:

init 프로세스의 애플리케이션은 루트 파일 시스템에서 실행되어야 합니다.
루트 파일 시스템은 루트 디렉터리 "/"를 제공합니다.
파티션을 마운트할 때 Linux가 의존하는 정보는 루트 파일 시스템에 저장됩니다. /etc/fstab 파일 중간;
ls, cd 및 기타 명령과 같은 쉘 명령 프로그램은 루트 파일 시스템에서 실행되어야 합니다.
간단히 말해서 Linux 시스템의 경우 커널 자체만 작동할 수 없으며 rootfs(구성; etc 디렉토리의 파일, /bin /sbin 및 기타 디렉토리의 쉘 명령, /lib 디렉토리의 라이브러리 파일 등)이 함께 작동할 수 있습니다.

Linux가 시작되면 가장 먼저 마운트해야 하는 것은 루트 파일 시스템입니다. 시스템이 지정된 장치에서 루트 파일 시스템을 마운트할 수 없는 경우 시스템은 오류를 발생시키고 시작을 종료합니다. 성공하면 다른 파일 시스템을 자동 또는 수동으로 마운트할 수 있습니다. 따라서 한 시스템에 서로 다른 파일 시스템이 동시에 존재할 수 있습니다. Linux에서 파일 시스템을 저장 장치와 연결하는 프로세스를 마운팅이라고 합니다. 현재 파일 시스템 계층(루트)에 파일 시스템을 연결하려면 mount 명령을 사용합니다. 마운트를 수행할 때 파일 시스템 유형, 파일 시스템 및 마운트 지점을 제공하십시오. 루트 파일 시스템이 루트 디렉터리의 "/"에 마운트된 후 루트 디렉터리에는 루트 파일 시스템의 다양한 디렉터리, 파일: /bin /sbin /mnt 등이 있고 다른 파티션을 /에 마운트합니다. mnt 디렉토리. /mnt 디렉토리에는 이 파티션의 다양한 디렉토리와 파일이 있습니다.

4. 커널에 루트 파일 시스템을 마운트하는 방법

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를 자신으로 설정합니다.

5. 루트 파일 시스템의 다양한 공통 디렉터리 소개

일반적으로 루트 파일 시스템에는 최소한 다음이 포함됩니다. 다음 디렉터리:

/etc/:存储重要的配置文件。
/bin/:存储常用且开机时必须用到的执行文件。
/sbin/:存储着开机过程中所需的系统执行文件。
/lib/:存储/bin/及/sbin/的执行文件所需的链接库,以及Linux的内核模块。
/dev/:存储设备文件。
로그인 후 복사

6. 일반적으로 사용되는 디렉터리

Linux 파일 시스템에는 일반적으로 다음 디렉터리가 있습니다.

/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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿