Mối quan hệ của các nút, LBA, Khối logic, khối và các ngành là gì?


19

Tôi hơi lúng túng khi hỏi câu hỏi này nhưng tôi muốn xem một sơ đồ cho thấy những điều sau đây có liên quan như thế nào. Sẽ thật tuyệt nếu sơ đồ cũng bao gồm bất kỳ biến đổi nào được yêu cầu để ánh xạ giữa các lớp khác nhau.

Theo tôi hiểu, tôi tin rằng chúng có liên quan theo cách sau, nhưng tôi không chắc rằng sự hiểu biết của tôi là chính xác 100%.

                           .-----------------.
                           |      inode      |
                           '-----------------'
                                    |
                           .-----------------.
                           |      EXT4       |
                           '-----------------'
                                    |
                         .---------------------.
                         | logical volume (LV) | --- part of LVM
                         '---------------------'
                                    |
                          .-------------------.
                          | volume group (VG) |  --- part of LVM
                          '-------------------'
                                    |
                            .---------------.
                            | /dev/<device> |
                            '---------------'
                                    |
                   .--------------------------------.
                   | Logical Block Addressing (LBA) |
                   '--------------------------------'
                                    |
                           .-----------------.
                           | blocks/sectors  |
                           '-----------------'
                                    |
                                   HDD     
                                _.-----._  
                              .-         -.
                              |-_       _-|
                              |  ~-----~  |
                              |           |
                              `._       _.'
                                 "-----"   

Tài liệu tham khảo

Câu trả lời:


18

cách tl; dr

Sơ đồ của bạn về cơ bản là chính xác.

/dev/<device> các tập tin

Tôi nghĩ rằng cách cơ bản nhất để bắt đầu trả lời câu hỏi của bạn là với /dev/<device>các tập tin. Nói rằng bạn có một đĩa cứng. Đĩa cứng này có bảng phân vùng dựa trên MBR và nó có hai phân vùng, một phân vùng được định dạng với một số tệp trên đó và một tệp khác được thiết lập cho LVM. Lưu ý rằng câu trả lời này nói về việc tạo tệp thiết bị đang hoạt động, ngụ ý rằng bạn đang sử dụng nhân Linux. Mọi thứ có một chút khác biệt trên các Unices khác.

Khi bạn cắm đĩa cứng này vào (hoặc khi hệ thống phát hiện ra lúc khởi động), một tệp thiết bị sẽ được tạo trong /devthư mục - thường được gọi là /dev/sd*hoặc /dev/hd*(tùy thuộc vào bộ điều khiển nào được sử dụng để kết nối ổ đĩa) - * là một lá thư. Byte trên tệp thiết bị về cơ bản được ánh xạ tuyến tính thành byte trên đĩa vật lý: nếu bạn sử dụng một công cụ để ghi vào đầu tệp thiết bị, dữ liệu đó cũng sẽ được ghi vào đầu vật lý của đĩa vật lý.

Bây giờ, hệ thống cũng hiểu các bảng phân vùng như MBR và GPT. Khi tệp thiết bị ban đầu đã được tạo, nó sẽ được đọc để xác định xem nó có bảng phân vùng hay không. Nếu có, các tệp thiết bị đại diện cho các phân vùng này sẽ được tạo. Vì vậy, giả sử rằng tệp thiết bị gốc đã được gọi /dev/sda, một tệp thiết bị được gọi /dev/sda1sẽ được tạo (đại diện cho phân vùng định dạng đầu tiên, ext4), cũng như một /dev/sda2thiết bị (đại diện cho phân vùng LVM thứ hai). Chúng được ánh xạ tuyến tính đến các phân vùng tương ứng của chúng giống như toàn bộ ổ đĩa - nghĩa là, nếu bạn sử dụng một công cụ để (ví dụ) ghi vào đầu /dev/sda2, dữ liệu được ghi sẽ được ghi vật lý vào đầu phân vùng thứ hai , mà thực sự là giữa của toàn bộ đĩa, vì đó là nơi phân vùng thứ hai bắt đầu.

Khối và ngành

Đây là thời gian thuận tiện để nói về các khối và cung: đây chỉ là các phép đo không gian trên đĩa vật lý, không có gì hơn (ít nhất là nếu tôi hiểu chính xác). Một khu vực là một khu vực vật lý trên một ổ cứng; nó thường là 512 byte - 4 KB trên các ổ cứng mới hơn. Một khối cũng là một đơn vị đo lường, nó hầu như luôn luôn là 8 KB. Khi ai đó nói về việc đọc và viết các khối, điều đó chỉ có nghĩa là thay vì đọc từng byte dữ liệu riêng lẻ, họ đọc và ghi dữ liệu theo từng khối 8 KB.

Hệ thống tập tin và inodes

Tiếp theo, hệ thống tập tin và inodes. Hệ thống tập tin là một khái niệm khá đơn giản: ở đầu khu vực mà hệ thống tập tin cư trú (khu vực này thường là một phân vùng), có một loạt thông tin trên hệ thống tập tin. Tiêu đề này (còn được gọi là siêu khối, tôi tin) trước tiên được sử dụng để xác định trình điều khiển hệ thống tệp nào sẽ được sử dụng để đọc hệ thống tệp và sau đó nó được trình điều khiển hệ thống tệp đã chọn sử dụng để đọc tệp. Tất nhiên, đây là một sự đơn giản hóa, nhưng về cơ bản nó lưu trữ hai thứ (có thể hoặc không được lưu trữ dưới dạng hai cấu trúc dữ liệu riêng biệt trên đĩa, tùy thuộc vào loại fs): cây thư mục và danh sách các nút. Cây thư mục là những gì bạn thấy khi bạn thực hiện một lshoặc mộttree. Cây thư mục cho biết các tập tin và thư mục là con của các thư mục khác. Mối quan hệ cha-con tệp / thư mục tạo thành cây thư mục UNIX như chúng ta biết.

Nhưng cây thư mục chỉ bao gồm tên. Những tên này được liên kết với số inode. Một số inode chứa thông tin như nơi các phần của tệp được lưu trữ trên đĩa. Một inode tự nó chỉ đơn giản là "một tập tin" không có tên; một nút được liên kết với một tên thông qua cây thư mục. Xem thêm Superblock, Inode, Dentry và File là gì?

Cho đến nay, chúng tôi có lời giải thích sau: /dev/sd*tập tin ánh xạ vào ổ đĩa cứng, /dev/sd*#tập tin ánh xạ tới số phân vùng #trên /dev/sd*. Hệ thống tập tin là cấu trúc dữ liệu trên đĩa theo dõi cây thư mục; nó thường được giữ trong một phân vùng ( /dev/sd*#). Một hệ thống tập tin chứa các nút; inodes là các số đại diện cho các tệp, cùng với dữ liệu được liên kết với các tệp đó (ngoại trừ tên và vị trí của chúng trong cây thư mục).

Điều đáng chú ý là các hệ thống tập tin thường theo dõi dữ liệu theo khối. Thông thường, cây thư mục và danh sách inode được lưu trữ trong các khối, không phải theo byte và inodes trỏ đến các khối trên đĩa, không phải byte. (Điều này có thể gây ra sự cố khi các tệp thường lãng phí một nửa khối không gian, vì hệ thống tệp đã phân bổ toàn bộ một khối nhưng không cần sử dụng toàn bộ khối đó cho phần cuối của tệp.)

Ánh xạ thiết bị

Phần cuối cùng của câu đố là một mô-đun rất quan trọng trong nhân Linux được gọi là trình ánh xạ thiết bị (tải nó với modprobe dm). Trình ánh xạ thiết bị về cơ bản cho phép bạn tạo một tệp thiết bị khác trong /dev/mapperthư mục. Tập tin thiết bị đó sau đó được ánh xạ tới một nguồn dữ liệu khác, có thể được chuyển đổi trong quy trình. Ví dụ đơn giản nhất là đọc một phần của tệp.

Giả sử bạn có hình ảnh toàn đĩa, hoàn chỉnh với bảng phân vùng. Bạn cần đọc dữ liệu từ một trong các phân vùng trong ảnh, nhưng bạn không thể chỉ phân vùng đó, vì đó là hình ảnh toàn đĩa, thay vì hình ảnh phân vùng đơn. Giải pháp là tìm vị trí trong hình ảnh phân vùng của bạn, sau đó tạo ánh xạ tệp thiết bị mới tới phần hình ảnh đĩa đó. Đây là một sơ đồ:

.-------------------.
|  /dev/mapper/foo  | <- This is the device file created with the device mapper
.___________________.
\                   /
 \                 /
  \               /   <- This is a small section of the image being mapped to
   \             /         the new device file
    \           /
     \         /
 .------------------.
 |  diskimage.img   | <- This is the full-disk image. It's a regular file.
 .__________________.     Notice how the mapping goes to _part_ of the file.

Một cách khác để nghĩ về nó giống như một đường ống chuyển đổi (đây là phép ẩn dụ chính xác hơn cho những gì đang xảy ra bên trong hạt nhân). Hãy tưởng tượng một băng chuyền. Một yêu cầu - đọc, ghi, v.v. - bắt đầu ở một đầu của băng chuyền, trên tệp thiết bị được tạo bằng trình ánh xạ thiết bị. Sau đó, yêu cầu đi qua chuyển đổi ánh xạ thiết bị sang tệp nguồn. Trong ví dụ trên, tệp nguồn này là một tệp thông thường , diskimage.img. Đây là sơ đồ:

Read operation goes onto
device mapper conveyor belt

read()                                      The device mapper transforms the read         The modified read request finally
  \                                         request by moving the requested region        reaches the source file, and the data
   \         Beginning of conveyor belt     to read forward by some number of bytes.      is retrieved from the filesystem.
    \     
     \       .-------------------.          .--------------------------.                  .------------------------.
      \      |  /dev/mapper/foo  |          |   Transformation logic   |                  | /path/to/diskimage.img |
       \     .___________________.          .___+_____+_____+_____+____.                  .________________________.
        \-->                                             
             ---------------------------------------------------------------------------------------------------------------
             o          o          o          o          o          o          o          o          o          o          o

Lưu ý cách trong sơ đồ, logic chuyển đổi được nối với trình ánh xạ thiết bị có ít công cụ +để thao tác yêu cầu đọc khi nó di chuyển trên băng chuyền.

Bây giờ, tôi không đặc biệt cảm thấy như sao chép sơ đồ đó và sửa đổi nó cho LVM, nhưng về cơ bản, phần chuyển đổi có thể là bất cứ điều gì - không chỉ là chuyển phạm vi byte về phía trước. Đây là cách LVM hoạt động: LVM Phys Extent là một phần của LVM nằm trên đĩa và theo dõi dữ liệu ở đâu. Hãy nghĩ về nó giống như hệ thống tập tin của LVM. Trong phép ẩn dụ băng chuyền, Extent vật lý là một trong những tệp nguồn và phép biến đổi là LVM thực hiện công việc của nó, ánh xạ một yêu cầu trên Khối lượng logic (là mục ngoài cùng bên trái của băng chuyền) vào dữ liệu vật lý trên đĩa. Nói về mà...

Tôi hơi khó hiểu về các khái niệm LVM của mình, nhưng IIRC, Nhóm Khối về cơ bản giống như một đĩa trong LVM. Một lần nữa, các cấp độ IIRC, RAID, v.v. được quản lý theo Nhóm Khối lượng. Khối lượng logic, sau đó, giống như một phân vùng và Luồng logic là những gì thực sự có tệp thiết bị đại diện cho chúng. Bạn đặt hệ thống tập tin và công cụ vào Tập hợp lý.

Điều thú vị về trình ánh xạ thiết bị là logic được tích hợp với nó có thể được chèn tùy ý vào ngăn xếp dữ liệu - tất cả những gì bạn phải làm là thay đổi tên thiết bị mà bạn đang đọc. Đây là cách các phân vùng được mã hóa hoạt động ( không phải là các lược đồ mã hóa hoạt động ở cấp độ tệp - chúng sử dụng FUSE) và đây là cách LVM hoạt động. Tôi không thể nghĩ ra bất kỳ ví dụ nào khác vào lúc này, nhưng tin tôi đi, trình ánh xạ thiết bị khá tệ.

Địa chỉ khối logic

Tôi chưa bao giờ nghe về điều này, vì vậy tôi không thể cung cấp bất kỳ thông tin nào về nó. Hy vọng ai đó sẽ ghé qua và chỉnh sửa câu trả lời này.


+1 cho nỗ lực nhưng tôi nghĩ rằng @slm đang tìm kiếm thêm chi tiết về cách chính xác các cấp độ khác nhau giao tiếp với nhau. Ví dụ, làm thế nào để inodes ánh xạ đến các ngành? Họ có làm không?
terdon

@terdon ah. Tôi không chắc lắm, vì tôi đã hỏi anh ấy trong cuộc trò chuyện nhưng anh ấy không trực tuyến
strugee 28/12/13

+1 cho nỗ lực quá. Xin lỗi vì không quay lại sớm hơn. Cần thời gian để tiêu hóa này. @ terdon nói đúng, tôi muốn thử và tiết lộ thêm chi tiết về cách ánh xạ giữa các lớp khác nhau. Tôi tự hỏi nếu tôi hỏi quá nhiều trong một câu hỏi duy nhất, nhưng tôi muốn có tất cả những điều này trong một câu hỏi và trả lời vì nó dường như được ghi lại trên internet. BTW, tôi thích mô tả của DM.
slm

@slm yeah Tôi đã cố gắng thêm một số điều đó trong các chỉnh sửa
strugee

lưu ý: Tôi đã khôi phục điều này kể từ khi Gilles tuyên bố trong bài đánh giá của mình rằng thông tin LBA được thêm vào không thực sự chính xác
strugee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.