nfs、systemd、automount(最後の質問は、podmanを使用してコンテナからマウントを再起動することに関連しています)

nfs、systemd、automount(最後の質問は、podmanを使用してコンテナからマウントを再起動することに関連しています)

Fedora Linux 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の状態は魔法のようになります。走る。今、カタログの1つが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"

おすすめ記事