여전히 mount /usr을 바인딩할 수 있나요?

여전히 mount /usr을 바인딩할 수 있나요?

/usr내 루트 볼륨이 거의 꽉 찼기 때문에 다른 볼륨에서 바인딩을 마운트한 적이 있습니다 . 하지만 Kubuntu 22.04.1 LTS, systemd버전 249.11에서는 지금은 불가능하다는 것을 알았습니다.

이것은 내가 전에 한 일입니다 /etc/fstab.

LABEL=bigvol    /bigvol         auto defaults,noatime,nodiratime,barrier=1,ro  0 2
/bigvol/d-sys/2023-02/usr  /usr auto bind,ro       0 0

즉, 사용하면 0 2부팅 /bigvol시 볼륨이 마운트되고, 사용하면 0 0나중에 /usr볼륨이 마운트되지 않습니다.

10년 넘게 이런 식으로 작동해 왔지만 systemdlinux-image-5.15.0-60의 버전 249.11+에서는 시작되었습니다.제본/usr/root루트 볼륨이 임시로 as 대신 as로 마운트되더라도 다른 볼륨보다 먼저 이 볼륨을 마운트합니다 /.

고쳐 쓰다:

그래서 추천을 받아봤는데

/bigvol/d-sys/2023-02/usr /usr auto bind,ro,x-systemd.requires-mounts-for=/bigvol 0 0

그것은아니요일하다, 그만둬동일한루트 볼륨이 /rootas 대신 as로 임시 마운트될 때 배치됩니다 /.

그러나 Freddy의 대답은 너무 설득력이 있어서 다른 것을 시도했습니다. 정확히 동일한 구문을 사용하여 다른 것을 마운트했습니다(이 /usr바인드 마운트를 주석 처리했지만 다른 바인드 마운트 디렉토리를 추가했습니다 /var/cache/apt/archives). 그리고 그것은 작동합니다!

그렇게 보인다

  1. systemd/usr볼륨이 특수하고 마운트되어야 함을 인식합니다 .앞으로다른 것.
  2. 하지만 내 볼륨이 표시되지 않습니다. /usr마운트해야 하는 바인드 마운트일 뿐입니다.뒤쪽에다른 것.
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
Codename:       jammy

$ apt-cache policy linux-image-5.15.0-60-generic
linux-image-5.15.0-60-generic:
  Installed: 5.15.0-60.66
  Candidate: 5.15.0-60.66
  Version table:
 *** 5.15.0-60.66 500
        500 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
        100 /var/lib/dpkg/status

$ apt-cache policy systemd
systemd:
  Installed: 249.11-0ubuntu3.6
  Candidate: 249.11-0ubuntu3.6
  Version table:
 *** 249.11-0ubuntu3.6 500
        500 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     249.11-0ubuntu3 500
        500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages

답변1

x-systemd.requires-mounts-for=/bigvol나중에 마운트하기 위해 바인드 마운트에 마운트 옵션을 추가할 수 있습니다 /bigvol.

~에서systemd.mount — 마운트 장치 구성:

x-systemd.requires-mounts-for=

RequiresMountsFor=생성된 마운트 장치와 다른 마운트 장치 간의 종속성을 구성합니다 . 매개변수는 절대 경로여야 합니다. 이 옵션은 여러 번 지정할 수 있습니다. 자세한 내용은 RequiresMountsFor= systemd.unit(5)을 참조하세요.

~에서systemd.unit — 장치 구성:

RequiresMountsFor=

공백으로 구분된 절대 경로 목록입니다. 지정된 경로에 액세스하는 데 필요한 설치된 모든 장치의 유형 Requires=과 종속성을 자동으로 추가합니다.After=

noauto로 표시된 마운트 지점은 을 통해 자동으로 마운트되지 않지만 local-fs.target이 옵션의 목적에 따라 계속 존중됩니다. 즉, 이 장치에서 끌어옵니다.

LABEL=bigvol               /bigvol  auto defaults,noatime,nodiratime,barrier=1,ro       0 2
/bigvol/d-sys/2023-02/usr  /usr     auto bind,ro,x-systemd.requires-mounts-for=/bigvol  0 0

답변2

이것은 /Ubuntu 20.04 시스템에서 가져온 것입니다.

:/$ ls -la | grep -- '->'
lrwxrwxrwx   1 root root    7 Sep 28  2020 bin -> usr/bin
lrwxrwxrwx   1 root root    7 Sep 28  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Sep 28  2020 lib32 -> usr/lib32
lrwxrwxrwx   1 root root    9 Sep 28  2020 lib64 -> usr/lib64
lrwxrwxrwx   1 root root   10 Sep 28  2020 libx32 -> usr/libx32
lrwxrwxrwx   1 root root    8 Sep 28  2020 sbin -> usr/sbin

Ubuntu 22.04가 유사하다고 가정하면 /usr루트 파티션에서 제거를 시도한다는 것은 커널이 처음 부팅될 때 no /bin, no /lib, no /lib32, /lib64no 및 no 를 사용할 수 있음을 의미합니다./libx32/sbin

pid 1이 이라는 점을 감안할 때 이는 루트 파티션에 모든 것을 시작할 /sbin/init프로세스가 없음을 의미합니다 .init

당연히 작동하지 않습니다.

큰 루트 파티션이 필요하지 않다고 가정하는 시대는 끝난 것 같습니다.

관련 정보