nfs, systemd 및 automount(마지막 질문은 podman을 사용하여 컨테이너에서 마운트를 다시 시작하는 것과 관련됩니다)

nfs, systemd 및 automount(마지막 질문은 podman을 사용하여 컨테이너에서 마운트를 다시 시작하는 것과 관련됩니다)

페도라 리눅스 36

/etc/fstab에 다음과 같은 설치 형식이 있습니다.

192.168.1.101:/volume1/video /mnt/synology_video nfs rsize=8192,wsize=8192,intr,comment=systemd.automount 0 0
192.168.1.101:/volume1/music /mnt/synology_music nfs rsize=8192,wsize=8192,intr,comment=systemd.automount 0 0

머신이 부팅되면 systemctl은 아래와 같이 설치 상태를 표시합니다."대기" 상태에 주의하세요:

mnt-synology_music.automount                     loaded active waiting   mnt-synology_music.automount
mnt-synology_video.automount                     loaded active waiting   mnt-synology_video.automount

Jellyfin 서버를 실행하는 Podman 컨테이너가 있고 다음과 같이 단위 파일에 설정된 podman-start를 사용하여 서버를 다시 시작해야 합니다.

[Unit]
Description=Podman Start All Containers With Restart Policy Set To Always
Documentation=man:podman-start(1)
StartLimitIntervalSec=0
Wants=network-online.target
After=network-online.target mnt-synology_music.automount mnt-synology_video.automount 

[Service]
Type=oneshot
RemainAfterExit=true
Environment=LOGGING="--log-level=info"
ExecStart=/usr/bin/podman $LOGGING start --all --filter restart-policy=always
ExecStop=/bin/sh -c '/usr/bin/podman $LOGGING stop $(/usr/bin/podman container ls --filter restart-policy=always -q)'

[Install]
WantedBy=default.target

Podman 컨테이너 자체는 볼륨 마운트(-v 옵션)를 사용하여 호스트에 해당 파일 시스템을 마운트합니다(아마도 이 부분을 변경해야 하며 직접 마운트해야 할까요?).

그러나 컨테이너를 다시 시작하려고 하면 실패합니다.설치당 정확히 한 번만 성공하면 성공합니다.심볼릭 링크 관련 오류입니다. 나는 어떤 심볼릭 링크도 사용하지 않습니다:

Error: OCI runtime error: crun: error stat'ing file `/mnt/synology_music`: Too many levels of symbolic links

컨테이너가 각 마운트에 부딪힐 때,아니면 수동으로 ls설치하는 경우, systemd의 상태는 마법처럼 됩니다.달리기. 이제 카탈로그의 하나가 ls마운트에 불을 밝히고 있으며, 이전에 실제로 "연결"되지 않았으며 무언가가 마운트에 닿기를 기다리고 있는 것이 분명합니다.

  mnt-synology_music.automount                      loaded active running   mnt-synology_music.automount
  mnt-synology_video.automount                      loaded active running   mnt-synology_video.automount

그런 다음 "nfs 마운트를 시작하기 전에 실제로 디렉터리에 닿을 때까지 기다리는" 추가 수준이 있는 것으로 보이며 이로 인해 컨테이너가 완전히 다시 시작되지 않습니다. 컨테이너가 각 파일 시스템을 계산할 때 마술처럼 시스템화됩니다.실제로설치를 시작하면 작동하지만 이로 인해 자동 재시작이 작동하지 않습니다.

이 동작에 영향을 미치는 옵션을 찾을 수 없습니다. 실제로 어딘가에서 ls -l시작하려면 그냥 하라는 댓글을 봤는데 , 정말 말도 안 되는 일이었습니다. 자동으로 실행하려면 이 기능이 필요하고 이를 수행하려면 명령을 작성해야 한다는 ls -l것이 미친 것 같습니다 .

이 문제를 올바르게 해결하는 방법은 무엇입니까?

답변1

알겠습니다. 커뮤니티에 감사드립니다. 답변은 다음과 같습니다.Podman 볼륨을 생성하고 nfs에 직접 마운트합니다., 컨테이너가 Podman 볼륨에 도달하고 Podman에 의해 마운트되도록 합니다.

나는 ansible을 사용하고 있으므로 다음과 같습니다.

- name: mount same volumes with podman too
  containers.podman.podman_volume:
    state: present
    name: "{{ item.name }}"
    options:
      - "type=nfs"
      - "o=rw"
      - "device=192.168.1.101:{{ item.path }}"
  with_items:
    - {"name": "synology_music", "path": "/volume1/music"}
    - {"name": "synology_video", "path": "/volume1/video"}

# later, run container

- name: run container
  containers.podman.podman_container:
    image: docker.io/jellyfin/jellyfin:latest
    name: jellyfin
    recreate: "{{ force_container_rebuild|bool }}"
    restart_policy: always
    privileged: yes
    capabilities:
      - NET_ADMIN
    published_ports:
      - "{{ jellyfin_service_ip }}:8096:8096/tcp"
      - "{{ jellyfin_service_ip }}:8920:8920/tcp"
      - "{{ jellyfin_service_ip }}:1900:1900/udp"
      - "{{ jellyfin_service_ip }}:7359:7359/udp"

    volumes:
      - "{{ infrastructure_path }}/jellyfin/config:/config:Z"
      - "{{ infrastructure_path }}/jellyfin/cache:/cache:Z"
      - "synology_video:/video"
      - "synology_music:/music"

관련 정보