テクノロジー · 実用ガイド

Linux の「Too many levels of symbolic links」—削除前に path chain を追跡する

元の caller と pathname を固定し、link を隠さず component ごとに調べ、証明した loop または深すぎる transition だけを修復します。

caller の記録から component walk、link target、ELOOP 分類へ進むオリジナル図。
オリジナルイラスト:symlink を変える前に最初の repeated transition を特定します。 Watch at Ease

「Too many levels of symbolic links」は pathname resolution の判定であり、表示された path を削除する許可ではありません。direct self-link、長い cycle、または traversal limit を超えた有効 chain があり得ます。

安全な対応は元の failing caller から path chain を監査することです。保存 target を保全し、最初の repeated transition を特定し、一か所だけ直して元の操作を再確認します。

元の caller と完全な pathname を固定する

完全な error、command、user、working directory、PATH、正確な pathname を保存し、host shell、service、chroot、container、mount namespace のどれかを記録します。別の場所の成功は同等の証拠ではありません。

rm、rm -r、ln -sf から始めません。directory entry と各 symlink の保存 target を先に保全します。末尾 slash や PATH lookup は kernel が解決する component を変えます。

link を隠さず component ごとに歩く

正確な path に namei -l を実行し、各 component の type、owner、target を記録します。疑わしい箇所は dereference しない lstat/stat と readlink を使い、relative target は link の親 directory から解釈します。

既出 component または inode に戻る最初の transition を印にします。これで A→A の self-loop と A→B→C→A の cycle を区別し、親 directory と namespace も台帳に残します。

ELOOP の種類を分類する

Linux は一つの pathname で 40 を超える symlink を追う場合も ELOOP を返すため、cycle のない長い chain も失敗します。繰り返しか上限超過かを証明し、深い chain の短縮と cycle 切断を分けます。

多くの command が失敗するなら PATH の各 directory を独立した pathname として調べます。service や container だけなら、その root、mount、working directory を host と比較します。

証明した transition だけを修復する

不正 link を確認したら旧 target を保存し、その entry だけを正しい relative または absolute target に置換します。曖昧な link path に rm -r を使わず、link、directory、mount boundary のどれかを先に証明します。

有効だが深すぎる chain は最終 object を保ったまま短縮します。PATH は loop component だけ、namespace 差異は正しい host link ではなく mount/deployment view を修復します。

元の caller で acceptance を再現する

namei -l を再実行し、意図した object で終了し、repeated transition も上限超過もないことを確認します。その後、同じ user、working directory、namespace で元の command を再実行します。

構造と caller の両方が必要です。chain が正しく、元の操作が成功し、一時 bypass、recursive deletion、誤 target が残らないことを確認し、前後台帳を保存します。

証拠保全、link の限定修復、path 検証、元 caller の再実行を示すオリジナル図。
オリジナルイラスト:証明した link だけを直し、元の caller で acceptance を確認します。 Watch at Ease