15장. RHEL의 이미지 모드에서 파일 시스템 관리
현재 이미지 모드는 OSTree를 백엔드로 사용하고 기본적으로 스토리지에 대해 composefs를 활성화합니다. 결과적으로 /opt 및 /usr 로컬 경로가 일반 디렉터리이고 /var 에 대한 심볼릭 링크가 아니기 때문에 /opt 에 쓰는 파생 컨테이너 이미지에 타사 콘텐츠를 설치할 수 있습니다.
타사 콘텐츠를 /opt 에 설치할 때 타사 구성 요소가 런타임 중에 /opt 내의 하위 디렉터리에 쓰기를 시도할 수도 있으며 잠재적인 충돌이 발생할 수 있습니다.
15.1. /sysroot를 사용한 물리적 및 논리 루트 개요 링크 복사링크가 클립보드에 복사되었습니다!
부트c 시스템이 완전히 부팅되면 chroot 에서 생성한 환경, 즉 운영 체제가 현재 실행 중인 프로세스 및 해당 하위 프로세스에 대해 명확한 루트 디렉토리를 변경합니다. 물리적 호스트 루트 파일 시스템은 /sysroot 에 마운트됩니다. chroot 파일 시스템을 배포 루트라고 합니다.
나머지 파일 시스템 경로는 시스템 부팅의 최종 대상으로 사용되는 배포 루트의 일부입니다. 시스템은 ostree=kernel 인수를 사용하여 배포 루트를 찾습니다.
/usr-
/usr에 모든 운영 체제 콘텐츠를 유지하는 것이 좋지만 엄격하게 필요하지는 않습니다./bin과 같은 디렉토리는/usr/bin에 대한 심볼릭 링크로 작동합니다. 이 레이아웃은 운영 체제를 분리하고 호스트 특정 리소스를 생성합니다.
composefs 가 활성화되면 /usr 은 / 와 다릅니다. 두 디렉터리는 모두 동일한 변경 불가능한 이미지의 일부이므로 bootc 시스템으로 전체 Usr Cryostat 를 수행할 필요가 없습니다.
/usr/local-
bootc 시스템을 사용하면 사용자 정의 컨테이너 이미지를 기본 진입점으로 생성할 수 있습니다. 이로 인해 기본 이미지는
/usr/local을 일반 디렉터리(즉, 기본 디렉터리)로 구성합니다.
기본 파일 시스템 레이아웃에는 일반 디렉터리로 /opt 및 /usr/local 이 모두 있습니다. 즉, 빌드 시 쓰기 가능하며 런타임 시 변경할 수 없습니다. 예를 들어 이러한 심볼릭 링크를 /var 에 만드는 RHEL CoreOS와 다릅니다.
/etc/etc디렉토리에는 기본적으로 변경 가능한 영구 상태가 포함되어 있지만etc.transient 구성옵션 활성화를 지원합니다. 디렉터리가 변경 가능한 영구 상태인 경우 업그레이드 간에 3방향 병합을 수행합니다.-
새 기본
/etc를 기본으로 사용 -
현재와 이전
/etc간의 diff를 새/etc디렉토리에 적용 -
/etc.에 있는 동일한 배포의 기본/usr/etc와 다른 로컬 수정된 파일을 유지합니다.
-
새 기본
ostree-finalize-staged.service 는 새 부트 로더 항목을 생성하기 전에 종료 시 이러한 작업을 실행합니다.
이는 Linux 시스템의 많은 구성 요소가 /etc 디렉토리에 기본 구성 파일을 제공하기 때문에 발생합니다. 기본 패키지가 제공되지 않더라도 기본적으로 소프트웨어는 . 패키지 기반 업데이트 시스템에 있는 구성 파일만 설치 시에만 채워지고 설치 후 언제든지 변경되지 않습니다. 이로 인해 /etc /etc 시스템 상태가 초기 이미지 버전의 영향을 받으며 변경 사항을 /etc/sudoers.conf 에 적용할 수 있으며 외부 개입이 필요할 수 있습니다. 파일 구성에 대한 자세한 내용은 RHEL bootc 이미지 빌드 및 테스트를 참조하십시오.
/var-
예를 들어
/var디렉토리는 하나만 있습니다. 기본적으로/var디렉터리에 배치된 파일과 데이터는 명시적으로 삭제될 때까지 지속되며 다른 세션과 시스템을 다시 시작할 때 사용할 수 있습니다./var파티션 또는 해당 하위 디렉터리를 임시 파일 시스템(TMPFS) 또는 네트워크 마운트 지점과 같은 마운트 지점으로 전환할 수 있습니다./var에 대해 별도의 파티션을 만들지 않으면 시스템은 바인드 마운트를 수행하고/var디렉터리에 단일 공유 및 영구/ostree/deploy/$stateroot/var를 생성하여 두 디렉터리가 배포 간에 동일한 데이터를 공유하도록 합니다.
기본적으로 /var 의 콘텐츠는 볼륨 역할을 합니다. 즉, 컨테이너 이미지의 콘텐츠가 초기 설치 시간 동안 복사되고 업데이트되지 않습니다.
/var 및 /etc 디렉토리는 다릅니다. /etc 를 비교적 작은 구성 파일에 사용할 수 있으며 예상되는 구성 파일은 종종 /usr 의 운영 체제 바이너리에 바인딩됩니다. /var 디렉터리에는 시스템 로그, 데이터베이스 등 임의로 대규모 데이터가 있으며 운영 체제 상태가 롤백되지 않은 경우 기본적으로 롤백하지 않습니다.
예를 들어 dnf downgrade postgresql 과 같은 업데이트를 수행하면 /var/lib/postgres 의 물리적 데이터베이스에 영향을 미치지 않습니다. 마찬가지로 bootc 업데이트 또는 을 수행하면 이 애플리케이션 데이터에 영향을 미치지 않습니다.
bootc 롤백
또한 /var separate를 사용하면 새로운 운영 체제 업데이트를 적용하기 전에 새 운영 체제 업데이트를 스테이징합니다. 즉, 업데이트가 다운로드되고 준비되지만 재부팅에만 적용됩니다. Docker 볼륨에도 적용되므로 데이터에서 애플리케이션 코드를 분리합니다.
애플리케이션에 미리 생성된 디렉터리 구조(예: /var/lib/postgresql )가 포함되도록 하려면 이 케이스를 사용할 수 있습니다. 이를 위해 systemd tmpfiles.d 를 사용합니다. 유닛에서 StateDirectory= <directory>를 사용할 수도 있습니다.
- 기타 디렉터리
-
컨테이너 이미지에
/run,/proc또는 기타 API 파일 시스템에 콘텐츠를 제공할 수 없습니다. 그 외에도/usr및/opt와 같은 기타 최상위 디렉터리는 컨테이너 이미지로 라이프사이클이 지정됩니다. /opt-
bootc는composefs를 사용하므로/opt디렉토리는/usr과 같은 다른 최상위 디렉토리와 함께 읽기 전용입니다.
소프트웨어가 /opt/exampleapp 의 자체 디렉터리에 작성해야 하는 경우 일반적인 패턴은 심볼릭 링크를 사용하여 로그 파일과 같은 작업을 위해 /var 로 리디렉션하는 것입니다.
RUN rmdir /opt/exampleapp/logs && ln -sr /var/log/exampleapp /opt/exampleapp/logs
선택적으로 이러한 마운트를 동적으로 수행하도록 서비스를 시작하도록 systemd 장치를 구성할 수 있습니다. 예를 들면 다음과 같습니다.
BindPaths=/var/log/exampleapp:/opt/exampleapp/logs
- 일시적인 루트 활성화
-
소프트웨어를 일시적으로(다음 재부팅)할 수 있도록
/usr및/opt를 포함한 모든 최상위 디렉토리에 쓰기 위해 유지되어야 하는 콘텐츠의 심볼릭 링크와 함께 임시 루트를 활성화할 수 있습니다.기본적으로 완전히 일시적인 쓰기 가능rootfs를 활성화하려면/usr/lib/ostree/prepare-root.conf에서 다음 옵션을 설정합니다.
[root]
transient = true
이를 통해 소프트웨어가 유지되어야 하는 콘텐츠의 심볼릭 링크와 함께 에 일시적인 쓰기를 수행할 수 있습니다.
/ opt