이중 심볼릭 링크(파티션 및 서버용)

이중 심볼릭 링크(파티션 및 서버용)

중복이 아니길 바라며 검색했지만 답변을 찾을 수 없습니다.

저는 리눅스 민트를 사용하고 있습니다. 부팅 시 자동으로 마운트되는 데이터 파티션이 있습니다. 내 폴더의 해당 파티션에 심볼릭 링크를 만들었습니다 /home/user.

문제는 내 데이터 파티션(복원해야 하는 웹사이트의 백업)에 에 심볼릭 링크를 걸어야 하는 "www" 폴더가 있다는 것 입니다 /home/user. /var/www/html서버변경. 가능합니까? 가장 좋은 접근 방식은 무엇입니까?

이전에는 "www" 폴더를 직접 보관했기 /home/user때문에 심볼릭 링크만 필요했습니다. 하지만 이제는 별도의 데이터 파티션이 있는데 어떻게 해야 할지 모르겠습니다. 내 서버에는 심볼릭 링크가 하나만 있을 수 있지만 추가하는 새 정보를 수동으로 복사/백업해야 합니다. 방법이 있으면 자동화하는 편이 낫습니다.

답변1

예, 폴더를 여러 위치에 심볼릭 링크할 수 있습니다. 귀하의 질문을 이해하면 두 개의 심볼릭 링크가 필요합니다.

/home/user/www -> /mnt/partition/www
/var/www/html -> /mnt/partition/www

상황이 다른 경우 답변을 조정해 드리겠습니다. 그러나 일반적인 절차는 동일해야 합니다.

 ln -s /mnt/partition/www /home/user/www
 ln -s /mnt/partition/www /var/www/html

/mnt/partition/www/var/www/htmlUnder and Over의 전체 디렉토리 구조가 필요한 경우 /home/user(예: 서로 동기화된 두 개의 동일한 "폴더") 바인드 마운트를 살펴보세요.

답변2

내가 올바르게 이해했다면 다음과 같습니다(약간 추상적임).

/data/html/xyz.html

홈 디렉터리에 다음 링크가 있습니다.

/home/user/html -> /data/html

따라서 데이터는 실제로 별도의 파티션에 저장됩니다./data

이제 링크를 통해 /var/www/html의 xyz.html 파일을 사용할 수 있습니다.

/var/www/html -> /data/html

그 명령은 다음과 같습니다

cd /home/user
ln -s /data/html .
cd /var/www
ln -s /data/html .

그러나 이 설정에서 두 가지 문제점을 발견했습니다.

  1. 귀하의 서버는 아래 링크를 따르도록 설정되지 않았을 수 있습니다 /var/www. 예를 들어, Apache는 +FollowSymLinks잠재적인 보안 위험이 있으므로 구성에 이 옵션을 포함 해야 합니다 .
  2. 편집된 모든 변경 사항은 즉시 웹 서버에 "푸시"됩니다. 가장 많이 제출된 자료가 사이트에 표시되도록 일부 개정 관리 시스템을 통해 이 작업을 수행해야 할 수도 있습니다.

위의 문제를 해결하는 방법에는 여러 가지가 있습니다. 공간이 /모든 것을 거기에 배치하는 이유 라면 /data하나를 만들고 /data/www거기에서 웹 서버 서버를 갖게 될 것입니다 /var/www(아래 심볼릭 링크가 필요하지 않음). 또한 Mercurial을 사용하여 아래 자료를 수정 하고 /data/html기본 위치에 복제하여 상황이 안정되면 (또는 ) /data/www에서 커밋할 수 있으며 사이트에서 제공되도록 커밋하고 푸시할 수 있습니다./data/html/home/user/html

답변3

Linux에서는 모든 물리적 스토리지를 파일 시스템의 모든 경로에 여러 번 할당할 수 있습니다. 파일 경로는 물리적으로 저장된 inode(핸들/포인터)입니다. 최소한 다음 세 가지 방법으로 동일한 실제 파일/폴더를 다른 파일 시스템 경로에 매핑할 수 있습니다.

1) 설치. 전체 물리적 드라이브를 디렉토리에 마운트할 수 있는 것처럼 기존 디렉토리를 다른 위치에 마운트할 수도 있습니다(번들 마운트). 이는 시스템의 모든 응용 프로그램에 완전히 투명하며, 어떤 프로그램도 실제로 디렉토리의 내용이 다른 곳에서 설치되었음을 알 수 없습니다. 귀하의 경우에는 쉽게 할 수 있습니다

mount --bind /mnt/partition/www/ /var/www/html/

기본적으로 네트워크 서버는 액세스할 수 없는 파일 시스템 부분에 대한 액세스 권한을 부여할 수 있으므로 일반적으로 심볼릭 링크를 따르는 것을 좋아하지 않기 때문에 이것이 가장 좋은 방법입니다.

폴더를 다른 폴더에 여러 번 마운트할 수 있습니다. 원래 디렉토리는 자신이 다른 곳에 설치되어 있다는 사실조차 인식하지 못하며 운영 체제가 이를 처리합니다.

2) 심볼릭 링크. 심볼릭 링크는 별칭일 뿐입니다. 이것은 가장 약한 결합입니다. 설치와 달리 기호 링크에는 해당 링크가 가리키는 경로만 포함됩니다(기본적으로 텍스트 형식). 즉, 부팅할 때마다(또는 필요할 때) 설치할 필요가 없으며 경로가 존재하지 않을 수도 있습니다. 또한 변경될 수도 있습니다. 대부분의 응용 프로그램은 이를 일반 파일처럼 사용하지만 몇 가지 주의 사항이 있습니다. 디렉터리 기호 링크에 몇 가지 문제가 있는 이유는 다시 들어갔다가 나올 때 반드시 같은 위치에 있지는 않기 때문입니다. 게다가 애플리케이션은 파일/디렉토리가 링크라는 것을 알고 있습니다. 루프를 피하기 위해 운영 체제는 따라야 할 링크 체인의 길이를 제한합니다(심각하게 남용하지 않는 한 거의 문제가 되지 않습니다). 물론 원하는 만큼 많은 링크를 가질 수 있으며 원래 디렉토리는 이에 대해 알지도 못합니다.

ln -s /mnt/partition/www/ /var/www/html/

ln -s /mnt/partition/www/ /home/user/www/

3) 하드 링크. Unix의 파일 시스템은 하드 드라이브의 물리적 위치를 가리키는 일련의 inode로 설계되었기 때문에 각 inode는 해당 위치에 도달하기 위한 주소일 뿐입니다. 따라서 동일한 주소를 가리키는 많은 inode(동일한 파일 시스템)를 가질 수 있습니다. -s스위치 켜기 명령을 사용하지 않으면 ln하드 링크가 생성됩니다(가능한 경우). 동일한 물리적 저장소를 가리키는 모든 파일 이름은 사실상 동일합니다. "원본" 파일이 없습니다. 그것들은 모두 동일한 파일이며 동일한 것에 대한 두 개 이상의 이름입니다. 삭제하면 실제로는 inode만 삭제되고(inode가 해당 공간을 가리키는 경우에만 공간을 사용 가능한 것으로 표시하므로) 한 파일을 삭제해도 다른 파일은 삭제되지 않습니다. 이름만 삭제됩니다. 물론 모든 하드 링크를 제거하면 저장소를 찾을 수 있는 위치를 알려주는 inode가 없으며 결국 손실될 것입니다(파일 시스템은 해당 공간을 다른 용도로 사용할 수 있습니다).

이 상황에서는 도움이 되지 않습니다. 각 파티션에는 자체 물리적 주소 관리 기능이 있으므로 하드 링크는 동일한 파일 시스템(동일한 파티션) 내에서만 작동합니다. 그러나 나는 완전성을 위해 그것을 포함하고 있습니다.

따라서... 무엇이든 심볼릭 링크로 연결하고 다른 링크로 연결할 수도 있습니다( /usr/lib대부분의 라이브러리가 이러한 방식으로 연결되어 공통 라이브러리 이름이 설치된 특정 버전에 연결됩니다). 루트 액세스 권한이 있는 경우 웹 서버가 사용할 디렉터리를 바인드 마운트하는 것이 더 정확합니다. 하드 링크가 필요하지 않을 수도 있지만 하드 링크가 존재한다는 것을 알아야 합니다.

관련 정보