/dev/sdxx 노드가 무엇인가요?

/dev/sdxx 노드가 무엇인가요?

TLDP의 이 이미지는 매우 훌륭합니다. 이는 사용자 공간에 파일 시스템에 대한 실제 읽기, 쓰기, 열기 액세스를 제공하기 전에 블록이 가상 파일 시스템에 매핑된다는 것을 보여줍니다.

여기에 이미지 설명을 입력하세요

그리고위키피디아서로 다른 계층에 3가지 버전의 파일 시스템이 있다고 말합니다.

따라서 표준(sd 노드)은 물리적 노드를 참조합니까, 아니면LVM매핑된 가상 파일 시스템?

아니면 파티션만을 언급하고 있습니까?(즉, 파티션에 직접 쓰면 파일 시스템 드라이버를 건너뛰게 되며 파일 시스템 드라이버가 없으면 파일 자체와 상호 작용할 수도 없습니다.)

그렇다면 파일 시스템 드라이버/또는 파일 시스템을 나타내는 장치는 무엇입니까? 아니면.... 모르겠어요.. 커널에 의한 디스크 사용량이 설명되는 곳에 누군가 링크를 걸어줄 수 있나요?

답변1

tl;dr: /dev/sdaX파티션을 나타냅니다. 나는 당신이 가지고 있는 근본적인 오해가 파일 시스템과 파티션의 차이라고 생각합니다. 파티션은 정말 간단합니다. 기본적으로 파티션은 디스크 시작 부분의 파티션 테이블에 정의된 디스크 섹션일 뿐입니다. 그러나 파일 시스템은 훨씬 더 발전된 것입니다. 파일 시스템은 본질적으로 커널(특히 파일 시스템 드라이버)이 읽고 쓸 수 있는 파일을 추적하는 데 사용되는 데이터 구조입니다. 해당 데이터 구조는 기술적으로 디스크의 어느 곳에나 배치할 수 있지만 fs 데이터 구조의 시작은 파티션의 시작과 동일할 것으로 예상됩니다.

귀하의 질문에서 LVM을 언급하셨습니다. 이는 좀 더 고급 주제이므로 잠시 잊어버리도록 하겠습니다(마지막에 LVM에 대해 설명하겠습니다).

0만 있는 단일 100GB 하드 디스크가 있다고 가정해 보겠습니다. 이 경우 /dev/sda100GB까지 확장할 수 있고(예를 들어 du특수 블록이므로 길이가 0으로 보고되지만) 0만 포함하는 파일을 갖게 됩니다. /dev/sda커널이 읽기 및 쓰기를 위해 원시 장치 콘텐츠를 사용자 공간에 노출하는 방법입니다. 이것이 디스크와 동일한 양의 데이터를 가지며 디스크와 동일한 내용을 갖는 이유입니다. 다섯 번째 비트 /dev/sda를 0이 아닌 1로 바꾸면 커널은 일치하도록 물리적 드라이브의 다섯 번째 비트를 뒤집습니다. 제공한 다이어그램에서 이 쓰기는 시스템 호출 인터페이스를 통해 커널로 이동한 다음 IDE 하드 디스크 드라이버를 거쳐 마지막으로 하드 디스크 자체로 이동합니다.


이제 해당 드라이브에 파일을 저장하는 등 유용한 작업을 수행하고 싶다고 가정해 보겠습니다. 이제 파일 시스템이 필요합니다. Linux 커널에는 엄청나게 많은 양의 파일 시스템을 사용할 수 있습니다 . 각각은 파일을 추적하기 위해 디스크의 서로 다른 데이터 구조를 사용하며, 예를 들어 다음과 같은 방식으로 데이터 구조를 수정할 수도 있습니다.원자 쓰기보장합니다(즉, 쓰기가 성공하거나 실패합니다. 머신이 충돌하더라도 데이터가 절반만 쓰여질 수는 없습니다). 이것은 사람들이 "파일 시스템 드라이버"에 대해 말할 때 의미하는 것입니다. 파일 시스템 드라이버는 디스크에서 특정 파일 시스템의 데이터 구조를 읽고 쓰는 방법을 이해하는 코드 조각입니다. 예로는 ext4, btrfs, XFS 등이 있습니다.

그래서 파일을 저장하고 싶습니다. 파일 시스템으로 ext4를 선택한다고 가정해 보겠습니다. 지금 해야 할 일은 빈 파일 시스템의 데이터 구조가 디스크에 존재하도록 디스크를 포맷하는 것입니다. 이렇게 하려면 를 사용 mkfs.ext4하고 에 쓰라고 지시합니다 /dev/sda. mkfs.ext4그런 다음 의 시작 부분에서 시작하는 빈 ext4 파일 시스템을 작성합니다 /dev/sda. 그런 다음 커널은 쓰기 작업을 수행하여 /dev/sda물리적 디스크의 시작 부분에 적용합니다. 이제 디스크에 파일 시스템의 데이터 구조가 포함되어 있으므로 mount /dev/sda /mnt새로운 파일 시스템을 마운트하거나 그 안으로 파일을 이동하는 등의 작업을 수행할 수 있습니다. 파일에 대한 모든 쓰기 작업은 /mnt시스템 호출 인터페이스를 거쳐 ext4 파일 시스템 드라이버( 보다 추상적인 "이 데이터를 이런저런 파일에 쓰기"를 디스크의 fs 데이터 구조에 적용해야 하는 구체적인 변경 사항으로 전환한 다음 IDE 하드 디스크 드라이버로 전환하고 마지막으로 드라이브 자체.


이제 위의 내용이 작동하지만 일반적으로 사람들이 작업을 수행하는 방식은 아닙니다. 보통 그들은 사용합니다파티션운전 중. 파티션은 기본적으로 드라이브의 특정 섹션입니다. 파티션을 사용하면파티션 테이블물리적으로 각 파티션의 위치를 ​​나타내는 드라이브 시작 부분에 있습니다. 파티션을 사용하면 드라이브를 다양한 목적으로 사용할 수 있는 여러 섹션으로 나눌 수 있으므로 깔끔합니다.

그럼 당신이 만들고 싶다고 가정 해 봅시다드라이브의 파일 시스템, 둘 다 ~50GB(즉, 반반). 먼저 드라이브를 분할해야 합니다. 이를 수행하려면 서로 다른 유형의 파티션 테이블을 생성하는 fdisk또는 와 같은 도구를 사용하고 gdisk도구에 /dev/sda. 파티셔닝이 완료되면 /dev/sda, /dev/sda1및 가 생성됩니다 /dev/sda2. /dev/sda1이는 /dev/sda2디스크의 다양한 파티션을 나타내는 커널의 방식입니다. 의 시작 부분에 쓰면 /dev/sda2두 번째 파티션의 시작 부분에 기록됩니다.디스크의 중간.

이것을 설명하는 또 다른 방법은 의 내용에 대해 이야기하는 것입니다 /dev/sda. /dev/sda즉, 물리적 하드 드라이브의 내용을 비트 단위로 기억해 보십시오 . 그리고 /dev/sda1비트 단위로 하드 드라이브의 첫 번째 파티션 내용입니다. 즉, /dev/sda약간의 데이터(파티션 헤더)와 의 정확한 내용, 의 정확한 내용이 뒤따른다는 의미입니다 . 구성한 파티션인 디스크의 특정 영역에 매핑됩니다 ./dev/sda1/dev/sda2/dev/sda1/dev/sda2

여기에서 mkfs.ext4다시 사용하여 에 파일 시스템을 생성 할 수 있으며 /dev/sda1, 이는 파티션 헤더 바로 다음에 시작하는 디스크에 기록됩니다. mkfs.ext4on 을 사용하면 /dev/sda2디스크 중앙에 있는(따라서 의 /dev/sda내용 중간에 있는) 파티션의 시작 부분부터 쓰기 시작합니다.

이제 예를 들어 mount /dev/sda2 /mnt. 이는 커널이 두 번째 파티션의 시작 부분에서 시작하는 파일 시스템 데이터를 읽고 이를 보다 유용한 형식, 즉 해당 위치의 파일 및 디렉토리로 사용자에게 공개하도록 지시합니다 /mnt. 다시 말하지만, 커널은 실제로 이 매핑을 수행하기 위해 파일 시스템 드라이버를 사용합니다.


이제 LVM에 대해 간단히 이야기해 보겠습니다. LVM은 기본적으로 파티션에 대한 추상화입니다. 파티션은 디스크의 물리적 위치에 매우 직접적으로 매핑됩니다. 위의 두 개의 파티션 예에서 첫 번째 파티션을 삭제하고 두 번째 파티션을 새로 확보된 공간으로 확장하려고 한다고 가정해 보겠습니다. 파티션은 디스크 영역에 직접 매핑되므로 이를 수행하는 유일한 방법은 전체 50GB의 파티션 데이터를 디스크의 시작 부분으로 물리적으로 이동한 다음 파티션을 끝까지 확장하는 것입니다.

LVM은 이를 덜 고통스럽게 만들도록 설계되었습니다. 기본적으로 LVM에 여러 개의 원시 스토리지를 제공한 다음 해당 스토리지를 사용하는 방법을 알려줍니다. LVM은 파티션처럼 나눌 수 있지만 기본 스토리지는 할당한 원시 스토리지 풀의 어느 곳에나 있을 수 있는 가상 "디스크"를 제공합니다. 위의 예를 사용하려면 LVM에 사용할 전체 디스크를 제공한 다음 두 개로 나눈 경우 첫 번째 "파티션"을 삭제하고 두 번째 "파티션"을 확장하여 해당 공간을 즉시 채울 수 있습니다. 왜냐하면 LVM은 추적할 수 있기 때문입니다. 엄격하게 "순서"를 요구하지 않고도 데이터가 디스크에 있는 위치를 확인할 수 있습니다.

LVM 작동 방식에 대한 자세한 내용은 다음 답변을 참조하세요.https://unix.stackexchange.com/a/106871/29146

답변2

/dev/sda전체 하드 드라이브에 대한 인터페이스입니다. 권한이 있는 경우 드라이브 내 어디든 직접 검색할 수 있습니다. /dev/sda1드라이브의 첫 번째 파티션입니다. 그 시점에는 아직 관련된 파일 시스템이 없습니다. 파티션 내에 파일 시스템이 직접 있을 수도 있고 LVM 컨테이너일 수도 있습니다.

관련 정보