루프백 파일을 읽기 전용으로 마운트하고 모든 쓰기를 RAM으로 리디렉션 할 수 있습니까?
답변
aufs 와 같은 통합 파일 시스템 계층을 사용하는 것이 가능합니다 .
데모:
파일 시스템 이미지 생성
# dd if=/dev/zero of=/tmp/image bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.0028428 s, 369 MB/s
# mke2fs /tmp/image
...
마운트하고 채우십시오
# mkdir /tmp/imgmnt
# mount -o loop /tmp/image /tmp/imgmnt
# echo hello > /tmp/imgmnt/hello.txt
# umount /tmp/imgmnt
읽기 전용으로 마운트
# mount -o loop,ro /tmp/image /tmp/imgmnt
# echo blah > /tmp/imgmnt/hello.txt
-su: /tmp/imgmnt/hello.txt: Read-only file system
작은 RAM 파일 시스템
# mkdir /tmp/rammnt
# mount -t tmpfs -o size=1M none /tmp/rammnt
둘 다 결합
# mkdir /tmp/combined
# mount -t aufs -o br:/tmp/rammnt:/tmp/imgmnt=ro none /tmp/combined
(읽기 전용) 위에 br
스택 /tmp/rammnt
(읽기-쓰기) 하여 새 “분기”( ) 를 작성하는 마운트 옵션 /tmp/imgmnt
입니다. 이 “분기”는에 (읽기-쓰기) 파일 시스템으로 표시됩니다 /tmp/combined
.
자세한 내용은 aufs (5) 매뉴얼 페이지를 참조하십시오.
이제 모든 작업이 완료되었습니다.
# ls /tmp/combined
hello.txt lost+found
# cat /tmp/combined/hello.txt
hello
# echo bye > /tmp/combined/hello.txt
# cat /tmp/combined/hello.txt
bye
# cat imgmnt/hello.txt
hello
# cat rammnt/hello.txt
bye
따라서 tmpfs
파일 시스템 에서 쓰기가 “중지” 되므로 루프 마운트 이미지 파일로 다시 전파하지 않습니다.
일반 디렉토리 (읽기 / 쓰기 파일 시스템)를 사용하거나 특정 디렉토리 /dev/shm
를 작성하는 대신 자신에게 적합한 디렉토리를 사용 했을 수 있습니다 tmpfs
.
이 기술 (또는 그 변형)은 일부 배포판 LiveCD에 의해 사용됩니다. Wikipedia aufs 항목에는 몇 가지가 있습니다.
답변
최신 정보:
우분투 (적어도 이후 버전) 에서이 작업을 수행하는 다른 두 가지 간단한 방법이 있습니다.
마지막으로 루트 파일 시스템 (우분투 11.04)으로이 작업을 수행하는 방법을 알아 냈습니다!
시스템을 부팅 가능하게 만드는 단계는 간단합니다. 내가 사용 이 가이드 와 조합을 이 가이드 및 여러 웹 검색과 하여 버그없이 올바르게 작동하는 방법을 알아 냈습니다.
개요:
-
운영:
sudo apt-get install fsprotect apparmor-utils
-
에 저장하십시오
/etc/initramfs-tools/scripts/init-bottom/__rootaufs
. 이름이 실제로 중요하지 않다고 생각하지만, 시작__
은 순서 목적으로 사용될 수 있으므로 이름을 변경하면 밑줄을 유지하고 싶을 수 있습니다. (이 파일 의 사본입니다 .)#!/bin/sh -e case $1 in prereqs) exit 0 ;; esac for x in $(cat /proc/cmdline); do case $x in root=*) ROOTNAME=${x#root=} ;; aufs=*) UNION=${x#aufs=} case $UNION in LABEL=*) UNION="/dev/disk/by-label/${UNION#LABEL=}" ;; UUID=*) UNION="/dev/disk/by-uuid/${UNION#UUID=}" ;; esac ;; esac done if [ -z "$UNION" ]; then exit 0 fi # make the mount points on the init root file system mkdir /aufs /ro /rw # mount read-write file system if [ "$UNION" = "tmpfs" ]; then mount -t tmpfs rw /rw -o noatime,mode=0755 else mount $UNION /rw -o noatime fi # move real root out of the way mount --move ${rootmnt} /ro mount -t aufs aufs /aufs -o noatime,dirs=/rw:/ro=ro # test for mount points on union file system [ -d /aufs/ro ] || mkdir /aufs/ro [ -d /aufs/rw ] || mkdir /aufs/rw mount --move /ro /aufs/ro mount --move /rw /aufs/rw # strip fstab off of root partition grep -v $ROOTNAME /aufs/ro/etc/fstab > /aufs/etc/fstab mount --move /aufs /root exit 0
-
에서로
/etc/default/grub
시작하는 줄을 찾은GRUB_CMDLINE_LINUX_DEFAULT
다음 따옴표 안에 매개 변수를 추가하십시오aufs=tmpfs
.보너스 : 가끔 리디렉션을 일시적으로 해제 해야하는 경우 커널 매개 변수 목록에서이 인수를 제거하십시오. GRUB 메뉴를 표시하기 위해 시스템을 부팅 할 때 Shift 키를 눌러이를 수행 할 수 있습니다. 그런 다음 e 를 눌러 매개 변수를 편집
aufs=...
하고 목록 에서 매개 변수를 지우십시오 . -
이 줄을에 추가하십시오
/etc/sysctl.conf
. ( 경고 : 잠재적 인 보안 위험.)kernel.yama.protected_nonaccess_hardlinks = 0 kernel.yama.protected_sticky_symlinks = 0
-
다음 줄을 실행하십시오.
sudo aa-complain dhclient3 sudo chmod 0755 /etc/initramfs-tools/scripts/init-bottom/__rootaufs sudo update-initramfs -k all -u sudo update-grub
모든 것이 제대로 진행되면 재부팅 할 때 임시 파일 시스템으로 연결됩니다. RAM 부분은에 있고 /rw
디스크 이미지는/ro
에 있지만 물론 읽기 전용입니다.
그럼에도 불구하고 임시 시스템으로 부팅했지만 영구적으로 변경해야하는 경우 다음과 같이 /ro
말 하여 파일 시스템을 다시 마운트 할 수 있습니다.
sudo mount -o remount,rw /ro
쓰기 가능하게하고 해당 디렉토리에 필요한 수정을 할 수 있습니다.
답변
예, unionfs에 의해 참조 unionfs.filesystems.org . 첫 번째 읽기 전용 파일 시스템을 마운트하고 unionfs를 통해 두 번째 읽기 / 쓰기 RAM 파일 시스템으로 마운트했습니다.
우분투에서는 unionfs-fuse 패키지를 찾을 수 있습니다.이 패키지는 커널 모듈이 아닌 사용자 공간에 동일한 기능을 구현 한 또 다른 구현입니다.