なにがしたい
- データを保存しているHDDでシンボリックリンクを作成できなかったことをメモする
- 原因も根本的な解決法も不明
まとめ
- カレントディレクトリがHDD上の時、lnが使えなかった
- カレントディレクトリをSSDにしたら使えた
環境
- PC構成:OS用SSDとデータ用HDD
- ln (GNU coreutils) 8.25
状況
発見直後(HDD)
- pythonのos.symlinkでシンボリックリンクを作成しようとしたところ、not implementedと怒られた
REPLから確認したとき
>>> import os
>>> os.symlink("a.py", "b.py")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 38] Function not implemented: 'a.py' -> 'b.py'
バージョンの問題か?
- pyenvで2.7.15を使っても同じエラーが再現された
- anaconda3-5.3.1でも同じ。
pathlibからならできたりしないだろうか…
- そんなことはなかった
a.symlink_to(b)
もうこうなったらsubprocessでln -sを呼んでしまえ
- 呼べなかった
subprocess.call("ln -s a b")
ln -sをREPLで実行してみる
- 関数は実装されていません???
実装されていません
$ touch a
$ ls
a
$ ln -s a b
ln: シンボリックリンク 'b' の作成に失敗しました: 関数は実装されていません
ディスクを変えて実行したらなんか動いた(SSD)
- SSDで同じことをすると関数が実装されていた(ほっとした)
一応確認したこと
- できるパターン
ln -s /SSD/a /SSD/b
ln -s /SSD/a /HDD/b
- できないパターン
ln -s /HDD/a /HDD/b
ln -s /HDD/a /SSD/b
本当はもう少し調べたいこと
- HDDの権限周り
- lnのコード