스토리지 드라이버 내부 덮어쓰기

스토리지 드라이버 내부 덮어쓰기

후속 조치이 문제.

나의 추가 독서도커 스토리지 드라이버overlay드라이버는 하드 링크 구현을 사용하여 모든 이미지 레이어를 하위 레이어에 병합하므로 inode 활용도가 높은 것으로 나타났습니다 . 누군가 이것을 설명할 수 있나요? 내가 아는 한, 하드 링크를 생성해도 새 inode가 생성되지는 않습니다.

답변1

OverlayFS는 Docker 수준에서 두 개의 스토리지 드라이버( 이라는 원본/이전 버전 overlay및 이라는 새 버전) 에서 사용되는 페더레이션된 파일 시스템입니다 overlay2. OverlayFS에는 읽기 전용으로 노출되는 하위 수준 디렉터리가 있습니다. 이 디렉터리 위에는 읽기 및 쓰기 액세스를 허용하는 상위 디렉터리가 있습니다. 각 디렉터리를 레이어라고 합니다. 하위 카탈로그와 상위 카탈로그의 결합된 보기는 "병합된" 카탈로그라고 하는 단일 단위로 나타납니다.

최신 overlay2스토리지 드라이버는 기본적으로 이러한 계층을 최대 128개까지 지원합니다. 이전 overlay드라이버는 한 번에 두 개의 레이어만 처리할 수 있습니다. 대부분의 Docker 이미지는 여러 레이어를 사용하여 구축되므로 이러한 제한이 중요합니다. 이 제한 사항을 해결하기 위해 각 레이어는 전체 이미지를 시뮬레이션하는 별도의 디렉터리로 구현됩니다.

테스트 시스템의 차이점을 확인하기 위해 Docker Hub에서 "ubuntu" 이미지를 가져와서 드라이버를 overlay2사용하여 디렉터리 구조의 차이점을 확인했습니다.overlay

[root@testvm1 overlay2]$ ls */diff
4864f14e58c1d6d5e7904449882b9369c0c0d5e1347b8d6faa7f40dafcc9d231/diff:
run

4abcfa714b4de6a7f1dd092070b1e109e8650a7a9f9900b6d4c3a7ca441b8780/diff:
var

a58c4e78232ff36b2903ecaab2ec288a092e6fc55a694e5e2d7822bf98d2c214/diff:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

c3f1a237c46ed330a2fd05ab2a0b6dcc17ad08686bd8dc49ecfada8d85b93a00/diff:
etc  sbin  usr  var


[root@testvm1 overlay]# ls */root/
001311c618ad7b94d4dc9586f26e421906e7ebf5c28996463a355abcdcd501bf/root/:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

048f81f400f7d74f969c4fdaff6553c782d12c04890ad869d75313505c868fbc/root/:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

8060f0c647f24050e1a4bff71096ffdf9665bff26e6187add87ecb8a18532af9/root/:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

fbdef944657234468ee55b12c7910aa495d13936417f9eb905cdc39a40fb5361/root/:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

overlay표현 에서 각 레이어는 완전한 이미지를 시뮬레이션하고 overlay2각 레이어에는 레이어 간의 정확한 차이점만 포함됩니다. overlay드라이버의 접근 방식 에서는 하드 링크를 사용하여 서로 다른 레이어 간의 공간을 절약합니다. 그러나 이 방법은 아직 완벽하지 않습니다. 이미지 데이터에 심볼릭 링크, 문자 장치 등과 같은 특수 파일이 포함되어 있는 경우 새로운 inode가 필요합니다. 이렇게 하면 많은 수의 인덱스 노드를 빠르게 추가할 수 있습니다.

내 테스트 시스템에서 inode overlay2overlay드라이버 간의 분포는 다음과 같습니다.

[root@testvm1 overlay2]$ du --inodes -s *
8       4864f14e58c1d6d5e7904449882b9369c0c0d5e1347b8d6faa7f40dafcc9d231
27      4abcfa714b4de6a7f1dd092070b1e109e8650a7a9f9900b6d4c3a7ca441b8780
3311    a58c4e78232ff36b2903ecaab2ec288a092e6fc55a694e5e2d7822bf98d2c214
1       backingFsBlockDev
25      c3f1a237c46ed330a2fd05ab2a0b6dcc17ad08686bd8dc49ecfada8d85b93a00
5       l

[root@testvm1 overlay]# du --inodes -s *
3298    001311c618ad7b94d4dc9586f26e421906e7ebf5c28996463a355abcdcd501bf
783     048f81f400f7d74f969c4fdaff6553c782d12c04890ad869d75313505c868fbc
768     8060f0c647f24050e1a4bff71096ffdf9665bff26e6187add87ecb8a18532af9
765     fbdef944657234468ee55b12c7910aa495d13936417f9eb905cdc39a40fb5361

내 시스템의 총 inode 수가 overlay23378개에 도달했습니다. 을 사용하면 overlay이 수가 5615로 증가합니다. 이 값은 실행 중인 컨테이너가 없는 단일 이미지를 고려하므로 많은 수의 Docker 컨테이너와 이미지가 있는 대규모 시스템은 /var/lib/docker/overlay지원되는 파일 시스템(XFS 또는 EXT4, 디렉터리)이 있는 지점에 빠르게 도달할 수 있습니다.

따라서 overlay2현재 대부분의 신규 설치에서는 최신 스토리지 드라이버를 선택하는 것이 좋습니다. 이 overlay드라이버는 Docker v18.09부터 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다.

관련 정보