태그 보관물: squashfs

램디스크에 자바 넣어서 쓰기

자바(JDK)를 램디스크에 넣어서 쓰는 방법을 설명한다.

자바 설치

우분투에서 제공되는 자바는 OpenJDK이다. 오라클에서 제공하는 자바를 설치 하려면 PPA를 사용해야 한다. 오라클 자바를 설치하려면 다음과 같이 PPA를 추가하고 설치한다. 여기서는 Java 8을 설치한다.

sangkle@nohyung:$ sudo add-apt-repository ppa:webupd8team/java
sangkle@nohyung:$ sudo apt-get update
sangkle@nohyung:$ sudo apt-get install oracle-java8-installer

램 디스크 만들기

램디스크를 만드는 방법은 여러가지가 있는데, 여기서는 tmpfs를 사용하겠다. 우선 램디스크를 마운트 할 디렉토리를 만들어 준다. 대체로 사용자가 추가한 마운트 지점은 /media 디렉토리 아래에 위치하지만, /media를 쓰기 귀찮기 때문에 루트 디렉토리에 ramdisk라는 디렉토리를 생성한다.

sangkle@nohyung:$ sudo mkdir /ramdisk

tmpfs 마운트는 다음 명령을 사용한다.

sangkle@nohyung:$ sudo mount -t tmpfs tmpfs /ramdisk

이렇게 하면 일단 램디스크가 만들어지는데, 부팅을 다시 하면 또 실행해 줘야 하기에 /etc/fstab 파일을 수정한다. 이 파일의 마지막 줄에 다음과 같이 추가한다. tmpfs /ramdisk tmpfs defaults,mode=1777 0 0

램 디스크에 자바 넣기

이제 이 램디스크에 자바를 넣어 줘야하는데, 램디스크는 말 그대로 램에 위치하기 때문에 부팅을 다시 하면 안에 있는 내용이 날아가 버린다. 그래서 부팅할 때마다 이 램디스크레 원하는 것을 복사해 줘야 한다. 그래서 자바 디렉토리 전체를 이 램디스크에 복사하는 스크립트를 작성해야 한다. 뭔가 점점 더 번거로워지고 있다. 여기에 새로운 방법이 있다. squashfs를 사용하는 것이다. squashfs는 이름에서 알 수 있듯이 압축하는 파일 시스템이다. 압축된 것을 loopback 장치로 마운트 해서 사용할 수 있는 파일시스템으로 저장장치 용량이 부족한 임베디드 쪽에서 많이(카더라) 사용 되고 있다고 한다. 그러니까 자바 디렉토리를 squashfs로 압축하고 이 압축된 파일을 램디스크에 마운트해서 사용하는 것이다. squashfs를 사용하려면 커널에서 제공을 해 줘야 하는데 다행이도 우분투에 설치되는 커널들은 squashfs를 사용 할 수 있게 되어 있다. 필요한 것은 이 파일 시스템을 만드는 도구가 필요한데 squashfs-tools 패키지를 설치하면 된다.

sangkle@nohyung:$ sudo apt-get install squashfs-tools

이제 설치된 자바 디렉토리를 압축해 보자

sangkle@nohyung:$ mksquashfs /usr/lib/jvm/java-8-oracle /home/sangkle/java8.sqsh

이 압축된 파일을 위에서 만든 램디스크에 마운트 하려면 다음 명령을 사용한다.

sangkle@nohyung:$ sudo mount -t squashfs -o loop /home/sangkle/java8.sqsh /ramdisk

/ramdisk 디렉토리에 이동해 보면 자바가 보인다. 램디스크를 만들때도 말했지만 부팅을 하면 다시 마운트를 해 줘야한다. 그래서 또 /etc/fstab을 수정한다. 이전에 램디스크 생성한 라인 아래에 다음을 추가한다.
[snippet]/home/sangkle/java8.sqsh /ramdisk squashfs ro,defaults,loop 0 0[/snippet]
알고 있겠지만 여기서 /home/sangkle 디렉토리는 아무 곳이나 가능하다. 필자는 /opt 디렉토리를 사용하고 있다. 편한 곳을 쓰자.

시스템에 자바설치 위치 알려주기

이제 시스템에 새로 만들어진 자바의 위치와 이 자바를 기본으로 사용하겠다고 알려주자. $ sudo update-alternatives –install “/usr/bin/java” “java” “/ramdisk/bin/java” 1 잘 됬는지 확인은 다음 명령이나 ls를 사용하면 된다.

sangkle@nohyung:$ sudo update-alternatives –config java
대체 항목 java에 대해 (/usr/bin/java 제공) 2개 선택이 있습니다.

선택 경로 우선순 상태
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 3 자동 모드
*1 /ramdisk/java/bin/java 1 수동 모드
2 /usr/lib/jvm/java-8-oracle/jre/bin/java 3 수동 모드

기본 사항[*]을 사용하려면 엔터, 다른 것을 사용하려면 번호를 입력하십시오:

sangkle@nohyung:$ ls -al /usr/bin/java /etc/alternatives/java
lrwxrwxrwx 1 root root 22 11월 20 10:49 /etc/alternatives/java -> /ramdisk/java/bin/java lrwxrwxrwx 1 root root 22 11월 15 09:14 /usr/bin/java -> /etc/alternatives/java

그리고

이 방법에는 문제점이 하나 있는데, 자바 버전이 업데이트 되면 java8.sqsh 파일을 다시 만들어 줘야한다는 것이다. 그래야 업데이트 된 나용이 적용이 되기 때문이다. 그리고 램디스크 크기를 걱정하고 있을지 모르겠다. 위 어디를 봐도 크기를 정해주는 곳이 없다. 대게 램디스크를 만들때 크기를 지정하는데 위에서는 일부러 지정하지 않았다. 왜냐하면 squashfs를 마운트 할 때 알아서 적당히 크기를 정해 주기 때문이다.

sangkle@nohyung:$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdd1 910G 164G 700G 19% /
udev 3.9G 4.0K 3.9G 1% /dev
tmpfs 1.6G 1.1M 1.6G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 3.9G 6.1M 3.9G 1% /run/shm
none 100M 84K 100M 1% /run/user
/dev/loop0 173M 173M 0 100% /ramdisk/java
/dev/sdc1 1.8T 395G 1.4T 23% /data2
/dev/sdb1 1.8T 1.6T 203G 89% /data
tmpfs 512M 98M 415M 19% /tmp/ram

램디스크의 크기즐 주는 옵션은 size이다. 512MB를 램디스크로 쓰고 싶으면 size=512M 옵션을 사용한다.