http://lists.busybox.net/pipermail/busybox/2010-December/074114.html (Understanding the bin, sbin, usr/bin , usr/sbin split)

최근에 HackerNews에 busybox 메일링 리스트가 하나 올라왔다. 이 글에서는 /bin, /usr/bin, /home 등이 생긴 문맥을 다뤘다. 나도 저것들의 차이는 알고 있었으나 그렇게 나눈 이유는 몰랐었다. 국내 블로그에서도 차이점은 보여주지만, 그 이유를 다룬곳은 없었다. 그래서 알면 좋겠다는 생각에 해당 글을 간추려서 정리했다.

Untitled

1969년도에 PDP-7이라는 장치 위에서 유닉스(Unix)가 만들어졌다. 그러다가 1971년도에 PDP-11로 기기를 업그레이드 했다. 이때 RK05 라는 디스크가 사용됐다. RK05는 디스크 하나당 1.5MB를 저장할 수 있었다. 이때 부터 실행 파일은 /bin, 관리 도구는 /sbin, 라이브러리들은 /lib, 임시 파일들은 /tmp에 저장을 했다.

Untitled

처음에는 RK05 디스크 하나에 OS를 다 담을수 있었다. 그러나 시스템이 커지면서 1.5MB의 RK05 디스크에 모든것을 담기엔 힘들어졌다. 그래서 디스크를 두개로 나눠서 사용하기로 했다.

그러면서 시스템에 꼭 필요한것은 원래대로 냅두고, 사용자가 컴퓨터를 사용하는데 필요한 파일들을 두번째 디스크에 옮겼다. 실행파일 뿐 아니라 라이브러리나 관리도구들도 다 분리를 해야 했다. 그래서 원래 시스템에 사용했었던 디렉터리 구조를 똑같이 들고왔다. (/bin, /sbin, /lib, tmp등)

Untitled

알다시피, 연결한 디스크는 특정 마운트 지점으로 접근할 수 있다. 두번째 디스크는 “사용자가 사용하는 ~~~” 이라는 의미로 /usr (/user) 아래에 마운트 시켰다. 그래서 / (root)와 /usr 로 나뉘어 졌다.

디스크를 두개 연결해서 2배 많은 용량을 확보했다. 첫번째 디스크에는 시스템이 돌아가는데 꼭 필요한것들이, 두번째 디스크에서는 사용자가 실행할·필요한 프로그램이나 파일들이 모여있었다. 그러나 두 디스크를 합쳐도 3MB밖에 용량이 되지 않는다. 그래서 또 새로운 디스크를 연결해야 했다.

새 디스크에는 사용자가 작업하는데 필요한 파일들과 디렉토리을 저장했다. (문서라던지, 소스코드라던지... 작업에 사용되는 파일들) 원래는 /usr를 홈 디렉터리 처럼 사용했지만, 용량이 부족해서 /usr 아래에 작업한다고 만든 파일과 디렉터리들을 전부 새 디스크에 옮긴 것이다. 그리고 이 디스크는 /home 에 마운트 하기로 했다.

Untitled

이렇게 디스크가 추가되면서 /, /usr, /home 의 구조가 만들어졌다.

당연하게도, 부팅을 할 때 첫번째 디스크를 로딩하고, 두번째 디스크를 로딩하고, 마지막으로 다른 디스크를 로딩 한다. 그래서 “최초에 부팅을 할때 두번째 디스크를 /usr에 마운트 할 정도의 기능은 할 수 있어야 한다” 라는 규칙을 만들었다고 한다. 다시 말해서, 첫번째 디스크에는 /bin, 과 /sbin 에는 “/usr를 마운트 할 수 있을정도의 프로그램들을 담았다.

이것이 /bin, /usr/bin, /home으로 파일 시스템 구조가 나뉘어진 이유이다. 하지만 시간이 지나면서 이렇게 구조를 나눌 필요가 없어졌다.

  1. 초기의 시스템은 “부팅에 선행적으로 필요한 파일들”을 따로 관리하지 못했다. 그래서 통으로 한 디스크에 모으려고 했었다. 하지만 요즘은 initrd, initramfs에서 부팅에 필요한 부분은 따로 관리한다.
  2. 요즘에는 공용 라이브러리를 쓴다.(shared library를 자주 쓴다) 과거에는 /usr/lib과 /lib이 독립적으로 있었고, 프로그램도 정적 로딩으로 구성되어 있었다. 그래서 두 폴더는 독립적이었고 상대쪽을 고려하지 않고 파일을 업그레이드 하거나 교체할 수 있었다. 하지만 다이나믹 링킹을 쓰면서 어느 한쪽이 업데이트 되면 (버전이 달라지면) 다른쪽이 작동이 안된다. /lib와 /usr/bin, /usr/lib 등이 상호종속적 구조로 바귀었다. 그래서 굳이 분리할 필요가 없어졌다. (이젠 분리하면 오류가 생긴다)
  3. 디스크 용량이 커지면서 애초에 나눌 필요가 사라졌다. 1990년대만 해도 100MB의 하드디스크를 쉽게 구할 수 있었다.

그럼에도 이 구조가 남은것은 관료적 이유(그냥... 이렇게 구조가 나뉘어 있으니까 이렇게 써라~)와 “왜 이렇게 파일구조가 나뉘어있는지” 생각·의견 제시하는 사람이 적어서 남겨졌다.