EC2에서 / mnt에 / tmp를 마운트하는 방법은 무엇입니까?


10

EC2 인스턴스 /tmp의 임시 스토리지 /mnt에 엔드 포인트 를 마운트 하고 ubuntu사용자 에게 기본 쓰기 권한을 부여하는 가장 좋은 방법이 무엇인지 궁금했습니다 .

다음과 같은 방법으로 /etc/rc.local을 편집하십시오.

mkdir -p /mnt/tmp && mount --bind -o nobootwait /mnt/tmp /tmp

그러나 그것은 나를 위해 작동하지 않습니다 (파일이 다릅니다).

기본 fstab 항목을 편집하려고했습니다.

/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2

/ mnt를 / tmp로 바꾸고 umask = 0777을 주지만 cloudconfig 때문에 작동하지 않습니다.

우분투 12.04를 사용하고 있습니다. 감사.


당신이 뭘 요구하는지 알아낼 수 없습니다. touchls -l?를 사용하여 예상 출력의 예를 제공 할 수 있습니까 ?
Jeff Ferland

예를 들어 파일을 목록 /mnt/tmp에 동일한 파일을 반환해야 /tmp하는 것을 추가 touch /tmp/testfile으로부터 발행 된 ubuntu사용자가 사용하지 않고 작동합니다 sudo.
Claudio Poli

답변:


13

처음 제안 할 때는 몇 가지 문제가 있지만 좋은 방향으로 가고있는 것 같습니다.

  1. 보안을 위해 mkdir명령은 모드에서 고정 비트가 설정된 디렉토리를 작성해야합니다.

    mkdir -m 1777 /mnt/tmp
    
  2. -o nobootwait이 저장되지 않는 필요하지 않는 것 같습니다 /mnt/fstab.

따라서 다음을 시도하는 것이 좋습니다 /etc/rc.local.

test -d /mnt/tmp || mkdir -m 1777 /mnt/tmp
mount --bind /mnt/tmp /tmp

/etc/fstab/ mnt가 임시 스토리지이고 /mnt/tmp디렉토리를 포함한 모든 내용 이 사라질 때 인스턴스를 중지 / 시작하거나 AMI를 생성하고 새 인스턴스를 실행할 때 바인드 마운트를 넣으 려고하면 문제가 발생합니다. .


이것을 사용자 데이터 스크립트에 넣는 것이 좋습니다?
Claudio Poli

1
먼저 rc.local을 코딩하여 임시 장치의 마운트를 시도하고 (이미 / mnt에 마운트 했습니까?), 실패하면 포맷하고 다시 마운트하십시오. 이렇게하면 중지와 다시 시작이 유지되어야합니다 (평소와 같이 종료가 새로 시작되는 방법 임). rc.local이 마운트 한 이후 / etc / fstab에 꼭 있어야 할 필요는 없지만 rc.local을 추가하면 아프지 않을 것입니다.
Skaperen

1
@ClaudioPoli : 이것을 사용자 데이터에 넣는 문제는 사용자 데이터 스크립트가 첫 번째 부팅 에서만 실행된다는 것 입니다. 부팅 마다 이것을 실행하기를 원합니다 . 사용자 데이터가 이것을 /etc/rc.local에 추가하도록 할 수는 있지만 해당 파일의 "exit"문 앞에 삽입해야합니다.
Eric Hammond

1
@Skaperen : / mnt는 일반적으로 깔끔하게 포맷되어 인스턴스를 실행할 때마다 시작됩니다. 중지 / 시작은 이전 실행에서 남은 데이터없이 깨끗하고 신선한 / mnt를 제공합니다. / etc / fstab에 대한 수정 사항은 중지 / 시작을 통해 유지되므로 모든 부팅시 rc.local이 수정하는 것은 의미가 없습니다.
Eric Hammond

13

우분투를 실행하고 있기 때문에 더 강력한 접근법은 Eric Hammond의 제안을 Upstart 스크립트 안에 넣고 마운트 직후에 바인딩을 수행하는 것입니다 /mnt.

# File /etc/init/mounted-mnt.conf

# mounted-mnt - Binds /tmp to /mnt/tmp

description     "Binds /tmp to /mnt/tmp"

start on mounted MOUNTPOINT=/mnt

task

script
    test -d /mnt/tmp || mkdir -m 1777 /mnt/tmp
    mount --bind /mnt/tmp /tmp
end script

Apache / Passenger와 같은 일부 서버는에 중요한 임시 파일을 생성 할 수 있습니다 /tmp. 일단 rc.local- 부팅 순서에서 마지막으로 - 그들이 숨겨진 서버를 혼동 얻을 것이다 달렸다.


흥미로운 아이디어 ..
Tom O'Connor

1

Romulo Ceccon제안한 Upstart 스크립트 사용 아이디어 는 훌륭합니다. 그러나, 불분명 한 스크립트 안에 마법을 숨기고 싶지 않을 수도 있습니다. fstab 안에 마운트를 추가해도됩니다. 예 :

LABEL=cloudimg-rootfs   /    ext4   defaults    0 0

# auto mount ephemeral storage (if any)
# init contents in /etc/init/mounted-local*.conf
/dev/xvdb  /mnt/local1  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2
/dev/xvdc  /mnt/local2  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2
/dev/xvdd  /mnt/local3  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2
/dev/xvde  /mnt/local4  auto  defaults,nofail,nobootwait,comment=cloudconfig  0 2

# bind /tmp to /mnt/local1, might still be on / if no ephemeral storage
/mnt/local1  /tmp  none  bind

그리고 이것은 Upstart 스크립트입니다 :

# File /etc/init/mounted-local1.conf

# mounted-local1 - init ephemeral storage in /mnt/local1

description     "Initializes ephemeral storage in /mnt/local1"

start on mounted MOUNTPOINT=/mnt/local1

# provide defult, see /etc/init/mounted-tmp.conf for details
env MOUNTPOINT=/mnt/local1

task

script
    # fix permissions if needed
    test -d $MOUNTPOINT && chmod 1777 $MOUNTPOINT

    # log to /var/log/upstart/mounted-local1.log
    #echo "initialized $MOUNTPOINT"

end script

이런 식으로 모든 디렉토리 구조와 임시 스토리지에없는 디렉토리 구조를 작성할 수 있습니다.

남아있는 것은 mkdir -p /mnt/local{1..4}다시 시작하고 다시 시작합니다 (현재 파일을 숨기지 않고는 / tmp를 마운트하지 않습니다).


fstab을 통한 마운트가 없으면 성공 /mnt/local1합니까? 아마도 장착 이벤트가 더 안전 할 것입니다.
Rômulo Ceccon

예, / mnt / local1을 사용할 수 있다고 가정했습니다. 필자는 일반적으로 / mnt에 마운트되는 것이 아무것도 없다는 것을 설명해야합니다. 따라서이 디렉토리 작성은 설정의 일부입니다. 마운트 이벤트를 사용하지 않았지만 아마도 옳습니다. 내 대답의 주요 요점은 fstab 파일에 마운트를 유지하고 chmod 1777또는 mkir -p 시작 스크립트 와 같은 작업을 수행하는 것이 더 나을 수 있다는 것 입니다.
sfussenegger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.