라즈베리 파이에 많이 사용하는 Transmission 에서 가끔 이런 에러가 날 때가 있다.
분명 외장하드는 용량이 많은데?
확인해보면 /dev/root가 100%가 되어있는 경우가 많다.
어 이건 SD카드인데 뭐지?
의아하긴하지만 어쨌든 이 문제로 해당 에러가 나는 것이 맞다.
외장하드에서 관리 되던 파일이 ...
이 문제로 해결책을 찾을 수가 없어서 해매었는데,
보통은
df -h
fdisk -l
명령어로 용량 분포를 확인한 뒤에
ncdu / (혹은 특정 디렉토리 /var)
으로 커맨드 형식으로 화면에서 용량이 큰 곳을 찾은 뒤 D 키를 눌러 삭제하는 방식으로 용량을 정리를 한다.
이걸로 해결이 되는 경우는 /var에 수 gb가 있다던가 하는 식의 이상한 상황이다.
내 경우는 위의 명령어로 확인했을 때 특이점이 없었다.
그래서 한참 뒤지다가
apt-get clean으로 해결을 했다.
일종의 라즈베리 파이 os (보통은 debian)에 설치되어있는 패키지를 정리하는 명령어로,
일단은 이렇게 해서 공간을 만들어 다운로드를 할 수는 있지만 이렇게 해서 생기는 용량이 수백 메가에 불과해서
금방 같은 에러가 뜨면서 모든 다운로드가 중지된다.
그러다 찾은 해결책을 하나 공유해본다.
이 역시 ncdu 명령어이긴한데
다음과 같다.
sudo mount --bind / /mnt
sudo ncdu -x /mnt
링크: https://www.raspberrypi.org/forums/viewtopic.php?t=71520
이미 마운트 된 외장하드를 /로 /mnt의 내용을 마운트를 하는 명령어다.
그러니까 특정 디렉토리에 디렉토리를 마운트 하는 것이다.
예를 들어 마운트 된 하드디스크의 일부를 다른 곳에 또 마운트 할 때 사용한다고 한다.
그리고 나서 ncdu로 하나의 폴더 처럼 외장하드인 /mnt를 스캐닝한다.
여기서 -x 옵션은 다음과 같다. (man ncdu 명령어로 확인 가능)
-x Do not cross filesystem boundaries, i.e. only count files and
directories on the same filesystem as the directory being scanned.
스캔된 디렉토리와 같은 파일 시스템에 있는 파일과 디렉토리만을 체크하는 옵션이다.
내 생각으로는 결국 이 문제의 원인은 외장하드인데,
(SD카드가 트랜스미션의 목적지인 외장하드에 의해 어떤 이유로든 100%가 되었으니)
(어떤 파일인지 확인하기 위해)외장하드를 SD 카드의 디렉토리의 일부처럼 마운트 해서 비교,
그렇게 영향을 받은 파일들을 확인하는 과정인 것이다.
결국 외장하드에 있던, SD카드를 100% 만든, 어떤 파일들이 /과 /mnt 비교한 상황에서의 ncdu에 의한 체크로 인해
드러난다.
그렇게 나온 파일을 확인 한 뒤에 D키를 눌러 삭제 해줬더니
100%에서 13%의 사용율로 바뀌면서 공간이 생긴다.
그런데 트랜스미션을 다시 시작해봐도 다른 에러가 뜨기 시작한다.
이유는 바인드 된 마운트를 해제하지 않아서다.
df -h를 실행해보면 /mnt에 마운트 되어있던 놈이 보이지 않는다.
https://askubuntu.com/questions/156667/how-to-unmount-after-using-mount-bind-option
이 때
umount /mnt (외장하드 마운트된 주소)
를 실행 후 재시작하면 다운로드가 시작된다.