Nhớ những năm cuối cấp 3, những ngày cuối chia tay bạn bè, cũng lên mạng viết linh tinh (thời yahoo blog :)).
Những câu nói "Buổi cuối cùng rùi mày à", "éo biết sau này có gặp lại nhau không ?", "Ra trường tính ở lại hay về quê ?", "Được nhiêu chấm rùi có được khá không ?"... Cảm thấy bâng khuâng! Buổi cuối cùng rùi, gặp nhau không à ? chưa chắc!, nhưng chắc một điều rằng những bạn bè dù tiếp xúc it hay nhiều mình sẽ luôn nhớ. Những kỉ niệm thời sinh viên sẽ theo mãi. Vẫn mong rằng 1 năm chúng ta có thể họp nhau lại một lần, có thể ngồi chậm rãi mà hồi lại những năm tháng ấy. Chúc chúng ta có thể hoàn thành kì thực tập cũng như đồ án tốt nghiệp thật thành công.
Thứ Bảy, 24 tháng 5, 2014
Thứ Tư, 21 tháng 5, 2014
[File System Forensics] Volume Analysis
Bài dịch từ cuấn File System Analysis
Trong bài viết chúng ta thảo luận về việc phân tích volume. Phân tích volume cần việc xem xét các cấu trúc dữ liệu mà liên quan tới việc phân vùng (partitioning) và lắp ghép (assembling) các bytes trong các thiết bị lưu trữ do vậy chúng ta có được các volumes. Các volumes được sử dụng để lưu file system hoặc cấu trúc dữ liệu khác. Trong phần này chúng ta tiếp cận các khái niệm của phân tích volume và thảo luận các nguyên lý mà áp dụng cho tất cả các kiểu hệ thống volume. Trong các bài tiếp theo chúng ta thảo luận về các kiểu phân vùng và lắp ghép các hệ thống
Giới thiệu
Phương tiện lưu trữ kĩ thuật số được tổ chức để cho phép việc lấy dữ liệu được hiệu quả. Trải nghiệm phổ biến nhất với một volume là khi chúng ta cài đặt Microsoft Windows và tạo các phân vùng (partitions) trên đĩa cứng. Quá trình cài đặt là quá trình tạo các phân vùng chính và phân vùng logic, và cuối cùng trong các bước cài đặt máy tính liệt kê một danh sách các "drives" hoặc "volumes" để lưu trữ dữ liệu. Một quá trình tương tự xảy ra khi cài đặt một hệ điều hành UNIX, và nó trở nên phổ biến trong các môi trường lưu trữ rộng lớn để sử dụng các phần mềm quản lý volume để có nhiều đĩa xuất hiện như là chúng bao gồm một đĩa lớn.
Trong suốt quá trình điều tra số, thông thường thì ta thu được ảnh của toàn bộ đĩa (disk image) và import image này vào các công cụ phân tích. Nhiều công cụ điều tra số tự động cắt (break) disk image ra thành các partitions, nhưng thỉnh thoảng chúng cũng gặp phải những vấn đề. Các khái niệm trong bài dịch này sẽ giúp một người điều tra hiểu các chi tiết về một công cụ đang làm điều gì và tại sao nó gặp phải các vấn đề nếu một đĩa bị lỗi. Ví dụ, khi các partitions trên đĩa bị xóa hoặc bị xóa đổi do nghi ngờ hay là một công cụ đơn giản không thể xác định vị trí một partition. Các thủ tục trong bài này cũng có thể hữu dụng khi phân tích các sectors mà không được cấp phát tới một partition.
Background
Các khái niệm Volume
Các hệ thống volume có 2 khái niệm trung tâm. Một là để lắp ghép (assemble) nhiều volumes lưu trữ thành một volume lưu trữ và khái niệm còn lại đó là để phân vùng (partition) các volumes lưu trữ vào trong các partitions độc lập với nhau. Thuật ngữ "partition" và "volume" thường được sử dụng thường xuyên cùng nhau, nhưng tôi sẽ đưa ra một sự khác biệt giữa chúng.
Một volume là một tập hợp các sectors có thể đánh địa chỉ mà một hệ điều hành (OS) hoặc một ứng dụng có thể sử dụng để lưu trữ dữ liệu. Các sectors trong một volume không cần phải là các sectors liên tiếp trên thiết bị lưu trữ vật lý; thay vào đó, chúng chỉ cần gửi đi một dấu ấn (impression) để cho thấy rằng chúng là gì. Một volume cũng có thể là kết quả của việc lắp ghép và sáp nhập các volumes nhỏ hơn.
Lý thuyết chung của các partitions
Một trong các khái niệm trong hệ thống volume là tạo ra các partitions. Một partition là một tập hợp các sectors liên tục trong một volume. Rõ ràng theo định nghĩa thì một partition cũng là một volume, là một khái niệm con trong khái niệm của volume, điều đó là lý do tại sao chúng ta hay bị nhầm lẫn. Tôi sẽ đề cập tới volume như là một partition được xác định vị trí như là một volume cha của partition. Các partitions được sử dụng trong nhiều hoàn cảnh, bao gồm
Trong hầu hết các trường hợp, sector đầu tiên và cuối cùng của một partition không chứa bất cứ thứ gì nhận dạng chúng là các sectors rìa. Khi các cấu trúc hệ thống partition đang bị mất, các ranh giới partition có thể đoán được sử dung hiểu biết về những gì được lưu bên trong partition.
Chú ý rằng một hệ thống partition phụ thuộc vào hệ điều hành và không phụ thuộc vào kiểu interface trên đĩa cứng. Do đó, một hệ thống Windows sử dụng cùng một hệ thống partition không quan tâm về đĩa sử dụng AT Attachment interface (ATA/IDE) hay là một Small Computer Systems Interface (SCSI)
Việc sử dụng các Volumes trong UNIX
Các hệ thống UNIX thường không sử dụng các volumes theo cách mà hệ điều hành Microsoft Windows làm. Phần này dành cho những users không quen thuộc với UNIX, và nó cung cấp một overview về cách các volumes được sử dụng trong UNIX.
Trong UNIX, user không thấy được một vài "drives", ví dụ như C: và D:. Thay vào đó, user được thấy một chuỗi các thư mục mà bắt đầu bằng thư mục root, hoặc /. Các thu mục con của / hoặc là các thư mục con trong cùng một file system, hoặc chúng là các mouting points cho các file systems mới và các volumes mới . Ví dụ, một CD-ROM có thể được biểu diễn là E: drive trong Windows, nhưng nó có thể được mount tại /mnt/cdrom trong Linux. Điều này cho phép user thay đổi các drives thông qua việc thay đôỉ các thư mục, và trong nhiều trường hợp user không biết những gì chúng làm. Hình 3 cho ta thấy cách đĩa cứng và CD volumes được truy cập trong Windows và UNIX
Lý thuyết chung của lắp ghép Volume
Các hệ thống lớn hơn sử dụng các kĩ thuật lắp ghép volume để làm cho nhiều đĩa trông giống như một. Một động lực cho việc làm đó là để thêm tính dư thừa trong trường hợp một đĩa hư. Nếu dữ liệu được ghi vào nhiều hơn một đĩa, có tồn tại một bản sao backup nếu một đĩa hư. Một động lực khác đó là dễ dàng hơn khi thêm nhiều không gian lưu trữ. Việc mở rộng (volume spanning) thực hiện thông qua việc kết hợp tổng thể không gian lưu trữ của nhiều volumes vì vậy một volume lớn được tạo ra. Các đĩa bổ sung có thể được thêm vào volume lớn mà không tác động gì đến dữ liệu đã tồn tại.
Nào hãy cùng điểm nhanh một ví dụ. Hình 4 trình bày một ví dụ bao gồm 2 disk volumes với tổng cộng 3 partitions. Partition 1 được gán với một volume tên C: và một thiết bị phần cứng xử lý partition 2 và 3. Thiết bị phần cứng xuất ra một volume lớn, và được tổ chức thành 2 partitions. Chú ý rằng trong trường hợp này thiết bị phần cứng không cung cấp tính đáng tin cậy, chỉ là một volume lớn hơn.
Chúng ta đã từng thảo luận về cách tìm địa chỉ sector. Phương thức phổ biến nhất đó là sử dụng địa chỉ LBA của nó, địa chỉ này là một con số bắt đầu từ 0 tại sector đầu tiên của đĩa. Địa chỉ này là địa chỉ vật lý của một sector.
Một volume là một tập hợp các sectors, và chúng ta cần gán một địa chỉ cho chúng. Một logical volume address là địa chỉ của một sector xét tương đối với bắt đầu của volume của nó. Chú ý rằng bởi vì một đĩa là một volume, địa chỉ vật lý là giống như địa chỉ logic của volume đối với disk volume. Các vị trí bắt đầu và kết thúc của các partitions được mô tả sử dụng các địa chỉ logic của volume (logical volume address).
Khi chúng ta bắt đầu nói về nội dung của một partition, có một lớp khác của các địa chỉ logic của volume. Các địa chỉ này là tương đối so với bắt đầu của một partition và không phải là bắt đầu của đĩa hay là parent volume. Chúng tôi sẽ phân biệt chúng thông qua việc đặt ở trước từ volume với từ "disk" hoặc "partition". Hình 5 cho ta thấy một ví dụ ở đó có 2 partitions và một không gian không được phân vùng (unpartitioned space) giữa chúng. Partition đầu tiên bắt đầu ở sector 0, vì vậy các địa chỉ logical partition volume là giống như các địa chỉ logical disk volume. Partition thứ 2 băt đầu ở sector vật lý 864 và các địa chỉ logical disk volume của các sectors này lớn hơn các địa chỉ logical partition volume của chúng.
Analysis Basics
Phân tích volume xảy ra thường xuyên, mặc dù nhiều nhà điều tra không thể nhận ra nó. Trong nhiều trường hợp, một investigator cần toàn bộ đĩa và import image vào trong các phần mềm phân tích của anh ấy để nhìn thấy nội dung của file system. Để nhận dạng nơi file system bắt đầu và kết thúc, các bảng partition phải được phân tích.
Một điều quan trọng nữa đó là phân tích partition layout của volume bởi vì không phải tất cả các sectors cần phải được gán vào một partition, và chúng có thể chứa dữ liệu từ một file system trước đó hoặc một mối nghi ngờ nếu đó cố gắng ẩn đi. Trong một vài trường hợp, hệ thống partition có thể bị lỗi hoặc bị xóa, và các công cụ được tự động hóa sẽ không làm việc.
Các kĩ thuật phân tích
Lý thuyết cơ bản của volume là đơn giản. Đối với các hệ thống phân vùng, chúng ta muốn xác định vị trí của các bảng partition và xử lý chúng để nhận dạng layout. Thông tin layout sau đó được cung cấp cho công cụ phân tích file system mà cần biết offset của một partition, hoặc nó có thể được in ra cho user do đó cô ta có thể xác định những dữ liệu gì nên được phân tích. Trong một vài trường hợp, dữ liệu trong một partition hoặc giữa các partitions cần được lấy ra từ parent volume. Để phân tích dữ liệu trong một partition, chúng ta cần xét xem kiểu dữ liệu của nó là gì. Nói chung, nó là một file system, chúng tôi sẽ trình bày trong những bài tiếp theo.
Để phân tích các thành phần lắp ghép (assembly components) của một volume system, chúng ta cần định vị và xử lý các cấu trúc dữ liệu mà mô tả những volumes được sáp nhập và cách chúng được sáp nhập. Có nhiều cách để các volumes có thể được sáp nhập.
Kiểm tra tính nhất quán
Khi phân tích các volume systems, có thể hữu ích khi kiểm tra mỗi partition liên quan thế nào tới các partitions khác. Điều này có thể phục vụ như là một cuộc kiểm tra sự tỉnh toán (sanity check) để xác định một nơi nào đó chứng cứ có thể được định vị bên cạnh việc nó xuất hiện trong mỗi partition. Hầu hết các partition systems không yêu cầu các entries được sắp xếp theo thứ tự, vì vậy bạn hay một công cụ phân tích nên sắp xếp chúng dựa trên vị trí bắt đầu và kết thúc trước khi bạn thực hiện các việc kiểm tra tính toàn vẹn.
Việc kiểm tra đầu tiên sẽ nhìn vào partition cuối cùng và so sánh vị trí kết thúc của nó với cuối cùng của parent volume. Lý tưởng nhất thì nó nên là sector cuối cùng của volume. Hình 6 cho ta thấy một tình huống mà ở đó partition sau cùng kết thúc trước cuối cùng của volume, và có các sectors có thể chứa các dữ liệu ẩn hay là bị xóa.
Dạng tiếp theo của việc kiểm tra sanity là so sánh các sectors bắt đầu và kết thúc của các partitions liên tục, và có 4 tình huống xảy ra. Tình huống thứ nhất, hiển thị trong Hình 6b, là hợp lệ, và có các sectors nằm giữa 2 partitions mà không ở trong một partition. Các non-partitioned sectors có thể được sử dụng để ẩn dữ liệu và nên được phân tích. Tình huống thứ 2, ta có thể thấy trong hình 6c, là trường hợp mà hầu hết mọi system có, và partition thứ 2 bắt đầu ngay sau partition đầu tiên.
Tình huống thứ 3, có thể thấy trong Hình 6d, đây là tình huống không hợp lệ, partition thứ 2 bắt đầu khi mà partition 1 chưa kết thúc. Điều này tạo ra một sự chồng chéo, và trong nhiều trường hợp nó là một điềm báo rằng bảng partition bị lỗi. Để xác định partition nào là đúng, bạn cần phân tích dữ liệu bên trong mỗi partition. Partition thứ 2 nằm bên trong partition đầu tiên, các nội dung của mỗi partition cần được phân tích để xác định xem lỗi nằm ở đâu.
Trích xuất nội dung Partition
Một vài công cụ yêu cầu một partition image như là input, hoặc chúng ta có thể muốn trích xuất dữ liệu trong hay là ở giữa các partitions tới một file riểng lẻ. Phần này sẽ trình bày cách trích xuất dữ liệu, và các kĩ thuật trong phần này được áp dụng cho tất cả các partition systems. Trích xuất dữ liệu làm một quá trình đơn giản khi đã biết được layout. Chúng tôi sẽ trình bày cách thực hiện điều này thông qua công cụ dd .
Công cụ dd là một công cụ dựa trên command line và yêu cầu một vài thông số (arguments). Chúng ta sẽ cần những thông số sau để trích xuất nội dung partition:
Trong bài viết chúng ta thảo luận về việc phân tích volume. Phân tích volume cần việc xem xét các cấu trúc dữ liệu mà liên quan tới việc phân vùng (partitioning) và lắp ghép (assembling) các bytes trong các thiết bị lưu trữ do vậy chúng ta có được các volumes. Các volumes được sử dụng để lưu file system hoặc cấu trúc dữ liệu khác. Trong phần này chúng ta tiếp cận các khái niệm của phân tích volume và thảo luận các nguyên lý mà áp dụng cho tất cả các kiểu hệ thống volume. Trong các bài tiếp theo chúng ta thảo luận về các kiểu phân vùng và lắp ghép các hệ thống
Giới thiệu
Phương tiện lưu trữ kĩ thuật số được tổ chức để cho phép việc lấy dữ liệu được hiệu quả. Trải nghiệm phổ biến nhất với một volume là khi chúng ta cài đặt Microsoft Windows và tạo các phân vùng (partitions) trên đĩa cứng. Quá trình cài đặt là quá trình tạo các phân vùng chính và phân vùng logic, và cuối cùng trong các bước cài đặt máy tính liệt kê một danh sách các "drives" hoặc "volumes" để lưu trữ dữ liệu. Một quá trình tương tự xảy ra khi cài đặt một hệ điều hành UNIX, và nó trở nên phổ biến trong các môi trường lưu trữ rộng lớn để sử dụng các phần mềm quản lý volume để có nhiều đĩa xuất hiện như là chúng bao gồm một đĩa lớn.
Trong suốt quá trình điều tra số, thông thường thì ta thu được ảnh của toàn bộ đĩa (disk image) và import image này vào các công cụ phân tích. Nhiều công cụ điều tra số tự động cắt (break) disk image ra thành các partitions, nhưng thỉnh thoảng chúng cũng gặp phải những vấn đề. Các khái niệm trong bài dịch này sẽ giúp một người điều tra hiểu các chi tiết về một công cụ đang làm điều gì và tại sao nó gặp phải các vấn đề nếu một đĩa bị lỗi. Ví dụ, khi các partitions trên đĩa bị xóa hoặc bị xóa đổi do nghi ngờ hay là một công cụ đơn giản không thể xác định vị trí một partition. Các thủ tục trong bài này cũng có thể hữu dụng khi phân tích các sectors mà không được cấp phát tới một partition.
Background
Các khái niệm Volume
Các hệ thống volume có 2 khái niệm trung tâm. Một là để lắp ghép (assemble) nhiều volumes lưu trữ thành một volume lưu trữ và khái niệm còn lại đó là để phân vùng (partition) các volumes lưu trữ vào trong các partitions độc lập với nhau. Thuật ngữ "partition" và "volume" thường được sử dụng thường xuyên cùng nhau, nhưng tôi sẽ đưa ra một sự khác biệt giữa chúng.
Một volume là một tập hợp các sectors có thể đánh địa chỉ mà một hệ điều hành (OS) hoặc một ứng dụng có thể sử dụng để lưu trữ dữ liệu. Các sectors trong một volume không cần phải là các sectors liên tiếp trên thiết bị lưu trữ vật lý; thay vào đó, chúng chỉ cần gửi đi một dấu ấn (impression) để cho thấy rằng chúng là gì. Một volume cũng có thể là kết quả của việc lắp ghép và sáp nhập các volumes nhỏ hơn.
Lý thuyết chung của các partitions
Một trong các khái niệm trong hệ thống volume là tạo ra các partitions. Một partition là một tập hợp các sectors liên tục trong một volume. Rõ ràng theo định nghĩa thì một partition cũng là một volume, là một khái niệm con trong khái niệm của volume, điều đó là lý do tại sao chúng ta hay bị nhầm lẫn. Tôi sẽ đề cập tới volume như là một partition được xác định vị trí như là một volume cha của partition. Các partitions được sử dụng trong nhiều hoàn cảnh, bao gồm
- Một vài file systems có một kích thước tối đa nhỏ hơn so với các đĩa cứng
- Nhiều laptops sử dụng một partition đặc biệt để lưu nội dung bộ nhớ khi hệ thống đi vào trạng thái sleep.
- Các hệ thống UNIX sử dụng các partitions khác nhau cho các thư mục khác nhau để giảm thiểu tối đa tác động cuả việc hư hỏng file system
- Các hệ thống dựa trên IA32 mà có nhiều hệ điều hành, ví dụ như Microsoft Windows và Linux, có thể yêu cầu các partitions khác nhau cho mỗi hệ điều hành
Hình 1. Một volume đĩa cứng được tổ chức thành 3 partitons và mỗi partitions được gán các tên volumes
Mỗi hệ điều hành và nền tảng phần cứng thì sử dụng một phương thức phân vùng khác nhau. Các hệ thống phân vùng phổ biến các một hay nhiều bảng, và mỗi entry của bảng mô tả một partition. Dữ liệu trong entry sẽ có sector bắt đầu của partition. Hình 2 cho ta một bảng mẫu với 3 partitions
Hình 2. Một bảng cơ bản với các entries cho start, end và type của mỗi partition
Mục đích của một hệ thống phân vùng là để tổ chức layout của một volume; do đó, chỉ dữ liệu cần thiết là vị trí bắt đầu và kết thúc cho mỗi partition. Một hệ thống partition không thể phục vụ mục đích của nó nếu các giá trị này bị lỗi hoặc là không tồn tại. Tất cả các trường khác, ví dụ như trường type và description, là các trường không cần thiết và có thể sai.Trong hầu hết các trường hợp, sector đầu tiên và cuối cùng của một partition không chứa bất cứ thứ gì nhận dạng chúng là các sectors rìa. Khi các cấu trúc hệ thống partition đang bị mất, các ranh giới partition có thể đoán được sử dung hiểu biết về những gì được lưu bên trong partition.
Chú ý rằng một hệ thống partition phụ thuộc vào hệ điều hành và không phụ thuộc vào kiểu interface trên đĩa cứng. Do đó, một hệ thống Windows sử dụng cùng một hệ thống partition không quan tâm về đĩa sử dụng AT Attachment interface (ATA/IDE) hay là một Small Computer Systems Interface (SCSI)
Việc sử dụng các Volumes trong UNIX
Các hệ thống UNIX thường không sử dụng các volumes theo cách mà hệ điều hành Microsoft Windows làm. Phần này dành cho những users không quen thuộc với UNIX, và nó cung cấp một overview về cách các volumes được sử dụng trong UNIX.
Trong UNIX, user không thấy được một vài "drives", ví dụ như C: và D:. Thay vào đó, user được thấy một chuỗi các thư mục mà bắt đầu bằng thư mục root, hoặc /. Các thu mục con của / hoặc là các thư mục con trong cùng một file system, hoặc chúng là các mouting points cho các file systems mới và các volumes mới . Ví dụ, một CD-ROM có thể được biểu diễn là E: drive trong Windows, nhưng nó có thể được mount tại /mnt/cdrom trong Linux. Điều này cho phép user thay đổi các drives thông qua việc thay đôỉ các thư mục, và trong nhiều trường hợp user không biết những gì chúng làm. Hình 3 cho ta thấy cách đĩa cứng và CD volumes được truy cập trong Windows và UNIX
Hình 3. Các mount points của 2 volumes và một CD-ROM trong (A) Microsoft Windows và (B) UNIX system
Để giảm thiểu tác động của việc lỗi drive và để cải thiện tính hiệu quả, UNIX thường phân vùng mỗi đĩa thành một vài volumes. Một volume cho thư mục root (/) lưu thông tin cơ bản, một volume riêng rẽ có thể tồn tại cho các thư mục home của user (/home/), và các ứng dụng có thể được xác định trong volume của riêng chúng (/usr/). Tất cả các hệ thống là duy nhất và có thể có một volume và cơ chế mouting hoàn toàn khác. Một vài hệ thống sử dụng chỉ một volume lớn cho thư mục root và không phân đoạn (segment) hệ thống. Lý thuyết chung của lắp ghép Volume
Các hệ thống lớn hơn sử dụng các kĩ thuật lắp ghép volume để làm cho nhiều đĩa trông giống như một. Một động lực cho việc làm đó là để thêm tính dư thừa trong trường hợp một đĩa hư. Nếu dữ liệu được ghi vào nhiều hơn một đĩa, có tồn tại một bản sao backup nếu một đĩa hư. Một động lực khác đó là dễ dàng hơn khi thêm nhiều không gian lưu trữ. Việc mở rộng (volume spanning) thực hiện thông qua việc kết hợp tổng thể không gian lưu trữ của nhiều volumes vì vậy một volume lớn được tạo ra. Các đĩa bổ sung có thể được thêm vào volume lớn mà không tác động gì đến dữ liệu đã tồn tại.
Nào hãy cùng điểm nhanh một ví dụ. Hình 4 trình bày một ví dụ bao gồm 2 disk volumes với tổng cộng 3 partitions. Partition 1 được gán với một volume tên C: và một thiết bị phần cứng xử lý partition 2 và 3. Thiết bị phần cứng xuất ra một volume lớn, và được tổ chức thành 2 partitions. Chú ý rằng trong trường hợp này thiết bị phần cứng không cung cấp tính đáng tin cậy, chỉ là một volume lớn hơn.
Hình 4. Một hệ thống volume mà sáp nhập 2 partitions vào trong một volume và phân vùng nó
Đánh địa chỉ SectorChúng ta đã từng thảo luận về cách tìm địa chỉ sector. Phương thức phổ biến nhất đó là sử dụng địa chỉ LBA của nó, địa chỉ này là một con số bắt đầu từ 0 tại sector đầu tiên của đĩa. Địa chỉ này là địa chỉ vật lý của một sector.
Một volume là một tập hợp các sectors, và chúng ta cần gán một địa chỉ cho chúng. Một logical volume address là địa chỉ của một sector xét tương đối với bắt đầu của volume của nó. Chú ý rằng bởi vì một đĩa là một volume, địa chỉ vật lý là giống như địa chỉ logic của volume đối với disk volume. Các vị trí bắt đầu và kết thúc của các partitions được mô tả sử dụng các địa chỉ logic của volume (logical volume address).
Khi chúng ta bắt đầu nói về nội dung của một partition, có một lớp khác của các địa chỉ logic của volume. Các địa chỉ này là tương đối so với bắt đầu của một partition và không phải là bắt đầu của đĩa hay là parent volume. Chúng tôi sẽ phân biệt chúng thông qua việc đặt ở trước từ volume với từ "disk" hoặc "partition". Hình 5 cho ta thấy một ví dụ ở đó có 2 partitions và một không gian không được phân vùng (unpartitioned space) giữa chúng. Partition đầu tiên bắt đầu ở sector 0, vì vậy các địa chỉ logical partition volume là giống như các địa chỉ logical disk volume. Partition thứ 2 băt đầu ở sector vật lý 864 và các địa chỉ logical disk volume của các sectors này lớn hơn các địa chỉ logical partition volume của chúng.
Hình 5. Địa chỉ logical partition volume là tương đối so với bắt đầu của partition trong khi địa chỉ logical disk volume là tương đối so với bắt đầu của đĩa
Analysis Basics
Phân tích volume xảy ra thường xuyên, mặc dù nhiều nhà điều tra không thể nhận ra nó. Trong nhiều trường hợp, một investigator cần toàn bộ đĩa và import image vào trong các phần mềm phân tích của anh ấy để nhìn thấy nội dung của file system. Để nhận dạng nơi file system bắt đầu và kết thúc, các bảng partition phải được phân tích.
Một điều quan trọng nữa đó là phân tích partition layout của volume bởi vì không phải tất cả các sectors cần phải được gán vào một partition, và chúng có thể chứa dữ liệu từ một file system trước đó hoặc một mối nghi ngờ nếu đó cố gắng ẩn đi. Trong một vài trường hợp, hệ thống partition có thể bị lỗi hoặc bị xóa, và các công cụ được tự động hóa sẽ không làm việc.
Các kĩ thuật phân tích
Lý thuyết cơ bản của volume là đơn giản. Đối với các hệ thống phân vùng, chúng ta muốn xác định vị trí của các bảng partition và xử lý chúng để nhận dạng layout. Thông tin layout sau đó được cung cấp cho công cụ phân tích file system mà cần biết offset của một partition, hoặc nó có thể được in ra cho user do đó cô ta có thể xác định những dữ liệu gì nên được phân tích. Trong một vài trường hợp, dữ liệu trong một partition hoặc giữa các partitions cần được lấy ra từ parent volume. Để phân tích dữ liệu trong một partition, chúng ta cần xét xem kiểu dữ liệu của nó là gì. Nói chung, nó là một file system, chúng tôi sẽ trình bày trong những bài tiếp theo.
Để phân tích các thành phần lắp ghép (assembly components) của một volume system, chúng ta cần định vị và xử lý các cấu trúc dữ liệu mà mô tả những volumes được sáp nhập và cách chúng được sáp nhập. Có nhiều cách để các volumes có thể được sáp nhập.
Kiểm tra tính nhất quán
Khi phân tích các volume systems, có thể hữu ích khi kiểm tra mỗi partition liên quan thế nào tới các partitions khác. Điều này có thể phục vụ như là một cuộc kiểm tra sự tỉnh toán (sanity check) để xác định một nơi nào đó chứng cứ có thể được định vị bên cạnh việc nó xuất hiện trong mỗi partition. Hầu hết các partition systems không yêu cầu các entries được sắp xếp theo thứ tự, vì vậy bạn hay một công cụ phân tích nên sắp xếp chúng dựa trên vị trí bắt đầu và kết thúc trước khi bạn thực hiện các việc kiểm tra tính toàn vẹn.
Việc kiểm tra đầu tiên sẽ nhìn vào partition cuối cùng và so sánh vị trí kết thúc của nó với cuối cùng của parent volume. Lý tưởng nhất thì nó nên là sector cuối cùng của volume. Hình 6 cho ta thấy một tình huống mà ở đó partition sau cùng kết thúc trước cuối cùng của volume, và có các sectors có thể chứa các dữ liệu ẩn hay là bị xóa.
Hình 6. năm ví dụ về cách 2 partitions có thể được tổ chức tương quan lẫn nhau. Ba ví dụ đầu tiên là hợp lệ, 2 ví dụ cuối cùng là không hợp lệ.
Dạng tiếp theo của việc kiểm tra sanity là so sánh các sectors bắt đầu và kết thúc của các partitions liên tục, và có 4 tình huống xảy ra. Tình huống thứ nhất, hiển thị trong Hình 6b, là hợp lệ, và có các sectors nằm giữa 2 partitions mà không ở trong một partition. Các non-partitioned sectors có thể được sử dụng để ẩn dữ liệu và nên được phân tích. Tình huống thứ 2, ta có thể thấy trong hình 6c, là trường hợp mà hầu hết mọi system có, và partition thứ 2 bắt đầu ngay sau partition đầu tiên.
Tình huống thứ 3, có thể thấy trong Hình 6d, đây là tình huống không hợp lệ, partition thứ 2 bắt đầu khi mà partition 1 chưa kết thúc. Điều này tạo ra một sự chồng chéo, và trong nhiều trường hợp nó là một điềm báo rằng bảng partition bị lỗi. Để xác định partition nào là đúng, bạn cần phân tích dữ liệu bên trong mỗi partition. Partition thứ 2 nằm bên trong partition đầu tiên, các nội dung của mỗi partition cần được phân tích để xác định xem lỗi nằm ở đâu.
Trích xuất nội dung Partition
Một vài công cụ yêu cầu một partition image như là input, hoặc chúng ta có thể muốn trích xuất dữ liệu trong hay là ở giữa các partitions tới một file riểng lẻ. Phần này sẽ trình bày cách trích xuất dữ liệu, và các kĩ thuật trong phần này được áp dụng cho tất cả các partition systems. Trích xuất dữ liệu làm một quá trình đơn giản khi đã biết được layout. Chúng tôi sẽ trình bày cách thực hiện điều này thông qua công cụ dd .
Công cụ dd là một công cụ dựa trên command line và yêu cầu một vài thông số (arguments). Chúng ta sẽ cần những thông số sau để trích xuất nội dung partition:
- if: disk image để đọc
- of: file để ghi ra kết quả
- bs: kích thước của block cho mỗi lần đọc, 512 bytes là mặc định
- skip: số lượng blocks cần bỏ qua trước khi đọc, mỗi cho kích thước bs
- count: số lượng blocks để sao chép từ input tới output, mỗi đối với kích thước bs
Thứ Bảy, 17 tháng 5, 2014
[File System Forensics]Công nghệ đĩa cứng
Đây là bài dịch trong cuốn File System Analysis
Nếu một digital investigator chỉ có thể học được một bộ phận phần cứng nào đó của máy tính, các đĩa cứng có thể là một lựa chon tốt nhất cho anh ta bởi vì các đĩa cứng là một trong những nguồn tài nguyên phổ biến dùng làm chứng cứ số. Trong phần này chúng ta sẽ thảo luận những điều cơ bản về đĩa cứng cũng như là những chủ đề được quan tâm bởi một investigator, ví dụ như là các phương thức truy xuất, write blocking, và những vị trí mà dữ liệu có thể ẩn được. Phần đầu tiên là một overview về cách một đĩa (disk) làm việc, và 2 phần tiếp theo sẽ đề cập tới các đĩa AT Attachment (ATA/IDE) và các đĩa Small Computer Systems Interface (SCSI).
Hình dạng đĩa cứng (Hard Disk Geometry) và ruột của nó (internals)
Ta cùng bắt đầu xem xét internals của tất cả các đĩa cứng hiện đại. Thông tin tìm được sẽ giúp ích cho ta khi tìm hiểu về cách dữ liệu được lưu và bởi vì các file systems cũ hơn và các cơ chế partitioning sử dụng hình dạng đĩa và các giá trị internal khác ẩn đi với các đĩa hiện đại. Do đó, biết về hình dạng đĩa sẽ giúp bạn hiểu một vài giá trị trong một file system. Mục đích của phần này không phải là giúp bạn sửa các đĩa cứng. Thay vào đó, mục đích là giúp bạn hiểu được các khái niệm cơ bản về những gì đang diễn ra phía bên trong.
Các đĩa cứng chứa một hay nhiều đĩa cứng hình tròn và được chồng lên nhau và tại quay cùng một thời điểm. Hình ảnh bên trong một đĩa có thể thấy phía bên dưới.
Đỉnh và đáy của mỗi đĩa được phủ lớp từ, và khi đĩa được sản xuất, các đĩa hoàn toàn trống rỗng.
Bên trong đĩa là một cánh tay (arm) di chuyển qua lại, và nó có một cái đầu (head) có thể đọc và ghi tại một thời điểm.
Một định dạng cấp độ thấp hơn được thực hiện trên các đĩa trống để tạo các cấu trúc dữ liệu cho các tracks và các sectors. Một track là một vòng tròn (circular ring) đi xung quanh đĩa. Mỗi track trên đĩa cứng có được một địa chỉ từ phía bên ngoài vào trong, bắt đầu từ 0. Ví dụ, nếu có 10,000 tracks trên mỗi đĩa, track phía bên ngoài của mỗi đĩa có thể là 0, và track phía bên trong (vòng tròn gần trung tâm nhất) có thể là 9,999. Bởi vì layout của mỗi đĩa là giống nhau và các tracks trên mỗi đĩa là địa chỉ giống nhau cho trước, thuật ngữ cylinder được sử dụng để mô tả tất cả các tracks tại một địa chỉ cho trước trên tất cả các đĩa. Ví dụ, cylinder 0 là track 0 trên đáy và đỉnh của tất cả các đĩa trong đĩa cứng. Các heads trong đĩa được cho một địa chỉ vì vậy chúng ta có thể nhận dạng duy nhất là đĩa nào và trên mặt nào của đĩa mà chúng ta muốn đọc hay ghi.
Mỗi track được chia thành các sectors, sector là đơn vị lưu trữ có thể đánh địa chỉ nhỏ nhất trong đĩa cứng và thường là 512 bytes. Mỗi sector được gán một địa chỉ, bắt đầu từ một cho mỗi track. Do đó, chúng ta có thể có được địa chỉ của một sector thông qua việc sử dụng cylinder address (C) để có được track, head number (H) để có được đĩa và phía (side), và sector address (S) để lấy được sector trong track. Bạn có thể nhìn hình 2 phía dưới.
Serial ATA
Làm việc với các thiết bị ATA có những bất lợi của nó. Các cables quá lớn, không mềm dẻo, và có các connectors ở những nơi mà bạn thường xuyên không muốn chúng ở đó. Các đĩa cứng còn có thể khó khăn để cấu hình với master và slave jumpers. Cable và tốc độ của interface là một vài động lực ẩn sau việc phát triển Serial ATA, những gì bao gồm trong thông số kĩ thuật ATA-7.
Interface được gọi là serial bởi vì chỉ một bit thông tin được vận chuyển giữa controller và đĩa cứng ở một thời điểm, khi so sánh với 16 bits tại một thời điểm với interface ban đầu, hoặc parallel ÂTA. Các serial ATA connectors bằng 1/4 so với kích thước của parallel ATA connectors và chúng chỉ có 7 contacts. Mỗi thiết bị serial ATA được kết nối trực tiếp tới controller, và không có sự móc nối của các thiết bị.
Serial ATA được thiết kế mà một controller mới có thể được đặt trong một máy tính, và máy tính không biết gì về sự khác biệt giữa ATA ban đầu (parallel ATA ) và serial ATA mới. Thực tế, serial ATA controller có các registers mà làm cho máy tính nghĩ rằng nó đang nói chuyện với một đĩa parallel ATA. Host computer coi mỗi đĩa được kết nối tới serial ATA controller như là một đĩa master trên channel của nó.
BIOS và Truy cập trực tiếp
Chúng ta đã thảo luận về cách các đĩa cứng ATA làm việc và cách chúng được điều khiển, chúng ta cần thảo luận về cách phần mềm giao tiếp với chúng bởi vì điều này có thể tạo ra các vấn đề khi muốn thu thập dữ lieu trên đĩa. Có 2 phương thức mà phần mềm có thể sử dụng để truy cập đĩa: trực tiếp thông qua hard disk controller hoặc thông qua BIOS.
Truy cập trực tiếp đến Controller
Chúng ta đã thấy trong phần trước là đĩa cứng được kết nối tới một hard disk controller, là một thành phần phát đi các commands tới đĩa cứng sử dụng ribbon cable. Một kĩ thuật cho việc đọc và ghi dữ liệu là cho phần mềm giao tiếp trực tiếp với hard disk controller, những gì sau đó giao tiếp với đĩa cứng.
Để giao tiếp theo cách này, phần mềm cần biết cách address controller và cách phát các commands tới nó. Ví dụ, phần mềm cần biết command code cho hành động đọc là gì, và nó cần biết cách nhận dạng các sectors nào cần đọc. Phần mềm sẽ còn phải query đĩa cứng để có được các chi tiết như kiểu và kích cỡ.
Truy cập BIOS tới Controller
Truy cập đĩa cứng trực tiếp là cách nhanh nhất để có được dữ liệu từ đĩa, nhưng nó yêu cầu phần mềm phải biết chút ít về phần cứng. Một trong các công việc của BIOS là ngăn cho phần mềm phải biết các chi tiết này. BIOS biết về hardware, và nó cung cấp các dịch vụ tới phần mềm vì vậy chúng có thể giao tiếp dễ dàng với hardware.
Nhắc lại phần "Boot Code Locations" mà BIOS được sử dụng khi máy tính khởi động. BIOS thực hiện nhiều công việc trong quá trình boot, nhưng có 2 công việc cần nhắc tới khi thảo luận ở đây. Công việc liên quan thứ nhất là việc nó xác định chi tiết của các đĩa đã được cài đặt hiện hành. Công việc liên quan thứ 2 đó là nó nạp bảng ngắt (interrupt table), bảng này được dùng để cung cấp dịch vụ tới hệ điều hành và phần mềm.
Để sử dụng các dịch vụ đĩa cứng BIOS, phần mềm phải nạp dữ liệu, ví dụ như địa chỉ sector hoặc các kichs thước, vào trong các thanh ghi CPU và thực thi software interrupt command 0x13 (thường được gọi là INT13h). Software interrupt command làm cho processor nhìn vào bảng ngắt và định vị được code mà sẽ xử lý yêu cầu dịch vụ. Table entry cho interrupt 0x13 chứa địa chỉ của BIOS code mà sẽ sử dụng kiến thức của nó để giao tiếp với controller. Về cơ bản, BIOS làm việc như người đứng giữa phần mềm và phần cứng.
INT13h thực sự là một dạng của các hàm đĩa (disk funtions) và bao gồm các hàm mà ghi lên đĩa, đọc từ đĩa, format các tracks trên đĩa, và query đĩa để lấy thông tin. Các hàm INT13h nguyên thủy cho việc đọc và ghi sử dụng các địa chỉ CHS và cho phép phần mềm truy cập một đĩa mà chỉ có 8.1GB hoặc ít hơn. Để khắc phục giới hạn này, các tính năng mới được thêm vào INT13h trong BIOS, được gọi là "extended INT13h."
Các hàm INT13h mở rộng yêu cầu BIOS code mới và sử dụng đĩa chỉ LBA 64-bit. Vì các lý do tương thích, các hàm CHS vẫn được duy trì, và phần mềm phải được viết lại để có thể sử dụng được các tính năng mới.
SCSI Drives
Phần này cung cấp một overview về SCSI, tập trung vào các kiểu khác nhau, và mô tả nó khác với ATA như thế nào. Các đĩa cứng SCSI không phổ biến bằng ATA trên các máy tính người dùng, nhưng nó là chuẩn trên hầu hết servers.
Giống như ATA, có nhiều thông số kĩ thuật của SCSI, các tiêu chuẩn này được công bố bởi T10 Technical Committee. Có 3 thông số kĩ thuật SCSI, SCSI-1, SCSI-2, SCSI-3. SCSI-3 thực sự bao gồm nhiều thông số kĩ thuật nhỏ hơn.
SCSI versus ATA
Có những sự khác biệt ở cả mức cao và mức thấp giữa SCSI và ATA. Các sự khác biệt cấp cao rõ ràng nhất đó là nhiều kiểu connector. Với ATA, chỉ có các connectors 40 và 44-pin, nhưng SCSI có nhiều hình dạng và kiểu dáng. SCSI cables có thể dài hơn ATA cables và có thể có nhiều hơn 2 thiết bị trên cùng một cable. Mỗi thiết bị trên SCSI cable cần một số ID duy nhất, số này có thể được cấu hình với các jumpers trên đĩa hoặc với phần mềm. Nhiều đĩa SCSI cũng có một jumper để làm cho đĩa chỉ đọc (read only), tính năng này giống như ATA write blocker. Các ATA write blockers là các thiết bị bên ngoài mà block các write commands.
Sự khác biệt mức thấp đầu tiên giữa ATA và SCSI đó là SCSI không có một controller. ATA interface đã được thiết kế để cho một single controller nói cho một hoặc hai đĩa cứng những gì cần làm. SCSI đã được thiết kế như là một bus ở đó các thiết bị khác nhau giao tiếp lẫn nhau và các thiết bị không bị giới hạn tới các đĩa cứng. Với một cấu hình SCSI, card mà được gắn vào trong máy tính không phải là một controller bởi vì mỗi thiết bị trên SCSI cable là có vai trò như nhau và có thể tạo ra các requests lẫn nhau.
Giống như ATA, SCSI chuẩn là parallel và dữ liệu di chuyển theo các khối 8-bit và 16-bit. Còn nữa, SCSI giống ATA ở chỗ nó cũng có một phiên bản serial, nó được xác định trong thông số kĩ thuật serial attached SCSI.
Các kiểu SCSI
Sự khác nhau giữa các phiên bản SCSI tóm lại ở chỗ có bao nhiêu bit được truyền đi tại một thời điểm, tần số của các tín hiệu trên cable (tốc độ của vận chuyển), và các kiểu tín hiệu được sử dung. Các kiểu SCSI cũ hơn có một phiên bản bình thường (normal version) và một phiên bản mở rộng (wide version), ở đó phiên bản bình thường vận chuyển 8 bits tại một thời điểm và phiên bản mở rộng vận chuyển 16 bits tại một thời điểm. Ví dụ, một thiết bị Ultra SCSI thực hiện một việc vận chuyển 8-bit và một thiết bị Wide Ultra SCSI thực hiện việc vận chuyển 16-bit, không cần đưa ra sự khác biệt giữa phiên bản bình thường và mở rộng.
Sự khác biệt thứ 2 trong các phiên bản SCSI đó là tốc độ của các tín hiệu trong cable. Bảng phía dưới đây đưa ra tên của các kiểu SCSI, tốc độ, và tỉ lệ vận chuyển đối với bus 8-bit bình thường và bus 16-bit mở rộng.
Bên trong mỗi kiểu này, có những cách khác nhau mà dữ liệu được biểu trên dây (wire). Cách thức rõ ràng nhất là single ended (SE) , theo cách thức này một điện áp cao được đặt trên dây nếu 1 được vận chuyển và không có điện áp được đặt trên dây nếu 0 được vận chuyển. Phương thức này tạo ra một vấn đề tại các tốc độ cao và với các cable dài hơn bởi vì tín hiệu điện không thể ổn định tại tốc độ cao và các dây có thể làm nhiễu sóng những dây khác.
Phương thức thứ 2 để vận chuyển dữ liệu được gọi là differential voltage, và mỗi bit thực sự yêu cầu 2 dây. Nếu một bit 0 được vận chuyển, không có điện áp được áp dụng cho cả 2 dây. Nếu một bit 1 được vận chuyển, một điện áp dương được áp dụng cho một dây và điện áp ngược được áp dụng cho dây thứ 2. Khi một thiết bị đọc các tín hiệu từ cable, nó có được sự khác biệt giữa 2 dây. Một lựa chon tín hiệu high voltage differential (HVD) tồn tại trong SCSI từ phiên bản đầu tiên và một lựa chọn tín hiệu low voltage differential (LVD) sử dụng một tín hiệu nhỏ hơn, tồn tại từ Ultra2 SCSI, và là kiểu tín hiệu chính cho các đĩa mới. Bảng phía dưới chỉ ra các kiểu SCSI mà sử dụng các kiểu tín hiệu khác nhau.
Nếu một digital investigator chỉ có thể học được một bộ phận phần cứng nào đó của máy tính, các đĩa cứng có thể là một lựa chon tốt nhất cho anh ta bởi vì các đĩa cứng là một trong những nguồn tài nguyên phổ biến dùng làm chứng cứ số. Trong phần này chúng ta sẽ thảo luận những điều cơ bản về đĩa cứng cũng như là những chủ đề được quan tâm bởi một investigator, ví dụ như là các phương thức truy xuất, write blocking, và những vị trí mà dữ liệu có thể ẩn được. Phần đầu tiên là một overview về cách một đĩa (disk) làm việc, và 2 phần tiếp theo sẽ đề cập tới các đĩa AT Attachment (ATA/IDE) và các đĩa Small Computer Systems Interface (SCSI).
Hình dạng đĩa cứng (Hard Disk Geometry) và ruột của nó (internals)
Ta cùng bắt đầu xem xét internals của tất cả các đĩa cứng hiện đại. Thông tin tìm được sẽ giúp ích cho ta khi tìm hiểu về cách dữ liệu được lưu và bởi vì các file systems cũ hơn và các cơ chế partitioning sử dụng hình dạng đĩa và các giá trị internal khác ẩn đi với các đĩa hiện đại. Do đó, biết về hình dạng đĩa sẽ giúp bạn hiểu một vài giá trị trong một file system. Mục đích của phần này không phải là giúp bạn sửa các đĩa cứng. Thay vào đó, mục đích là giúp bạn hiểu được các khái niệm cơ bản về những gì đang diễn ra phía bên trong.
Các đĩa cứng chứa một hay nhiều đĩa cứng hình tròn và được chồng lên nhau và tại quay cùng một thời điểm. Hình ảnh bên trong một đĩa có thể thấy phía bên dưới.
Hình 1 Phía bên trong của một ATA disk, bạn có thể thấy các đĩa phía bên phải và một cánh tay phía bên trái để đọc và ghi lên các đĩa
Đỉnh và đáy của mỗi đĩa được phủ lớp từ, và khi đĩa được sản xuất, các đĩa hoàn toàn trống rỗng.
Bên trong đĩa là một cánh tay (arm) di chuyển qua lại, và nó có một cái đầu (head) có thể đọc và ghi tại một thời điểm.
Một định dạng cấp độ thấp hơn được thực hiện trên các đĩa trống để tạo các cấu trúc dữ liệu cho các tracks và các sectors. Một track là một vòng tròn (circular ring) đi xung quanh đĩa. Mỗi track trên đĩa cứng có được một địa chỉ từ phía bên ngoài vào trong, bắt đầu từ 0. Ví dụ, nếu có 10,000 tracks trên mỗi đĩa, track phía bên ngoài của mỗi đĩa có thể là 0, và track phía bên trong (vòng tròn gần trung tâm nhất) có thể là 9,999. Bởi vì layout của mỗi đĩa là giống nhau và các tracks trên mỗi đĩa là địa chỉ giống nhau cho trước, thuật ngữ cylinder được sử dụng để mô tả tất cả các tracks tại một địa chỉ cho trước trên tất cả các đĩa. Ví dụ, cylinder 0 là track 0 trên đáy và đỉnh của tất cả các đĩa trong đĩa cứng. Các heads trong đĩa được cho một địa chỉ vì vậy chúng ta có thể nhận dạng duy nhất là đĩa nào và trên mặt nào của đĩa mà chúng ta muốn đọc hay ghi.
Mỗi track được chia thành các sectors, sector là đơn vị lưu trữ có thể đánh địa chỉ nhỏ nhất trong đĩa cứng và thường là 512 bytes. Mỗi sector được gán một địa chỉ, bắt đầu từ một cho mỗi track. Do đó, chúng ta có thể có được địa chỉ của một sector thông qua việc sử dụng cylinder address (C) để có được track, head number (H) để có được đĩa và phía (side), và sector address (S) để lấy được sector trong track. Bạn có thể nhìn hình 2 phía dưới.
Hình 2. Hình dạng đĩa của một platter chỉ ra track (hoặc cylinder) và sector addresses
Chúng ta sẽ thảo luận trong phần "Các kiểu địa chỉ của Sector" liên quan đến vấn đề địa chỉ CHS không còn được sử dụng như là phương thức đánh địa chỉ chính nữa. Logical Block Address (LBA) được sử dụng thay thế, và nó gán các địa chỉ có thứ tự cho mỗi sector. Địa chỉ LBA không có liên quan tới vị trí vật lý của nó.
Một sector có thể bị lỗi và do đó không còn được sử dụng để lưu trữ dữ liệu người dùng. Với các đĩa cũ hơn, trách nhiệm của hệ điều hành là biết vị trí của các bad sectors và không cấp phát các sectors này cho các files. Người dùng cũng có thể nói một cách thủ công cho đĩa biết các sectors nào cần lờ đi bởi vì chúng bị lỗi. Nhưng việc làm như vậy là không cần thiết, bởi vì các đĩa hiện đại có thể nhận dạng một bad sector và remap địa chỉ này tới một vị trí tốt ở một nơi nào đó trên đĩa. Người dùng không bao giờ biết điều đó xảy ra.
Mô tả trước đây về layout được đơn giản hóa. Trong thực tế, đĩa sắp xếp vị trí của các sectors sao cho đạt được hiệu năng cao nhất. Vì vậy, các sectors và các tracks có thể được bù trừ để có được thuận lợi về seek times và tốc độ của drive.
ATA / IDE Interface
ATA Attachment (ATA) interface là một interface đĩa cứng phổ biến nhất. Các đĩa sử dụng interface này thường được nhắc tới như là các đĩa IDE , nhưng IDE là viết tắt của Integrated Disk Electronics và nhận dạng một đĩa cứng mà có logic board được tích hợp sẵn trong nó, những gì mà các đĩa cũ không có. Interface thực sự mà các đĩa "IDE" sử dụng là ATA. Phần này chúng ta đi vào các chi tiết liên quan tới ATA vì vậy chúng ta thảo luận các công nghệ, ví dụ như hardware write blockers và host protected areas.
Các thông số kĩ thuật ATA được phát triển bởi T13 Technical Committee (http://www.t13.org). Phiên bản của mỗi chi tiết kĩ thuật là có tính phí, nhưng các phiên bản dự thảo thì free có trên INCITS web site. Đối với mục đích học tập các phiên bản dự thảo là đủ.
Các đĩa ATA yêu cầu một controller, những gì được tích hợp sẵn trong moderboard của các hệ thống hiện đại. Controller yêu cầu các commands đến một hoặc 2 đĩa ATA sử dụng một ribbon cable. Cable có độ dài tối đa là 18 inches và có 40 pins, nhưng các đĩa mới hơn có them 40 dây mà không được kết nối tới bất cứ pin nào.
Một channel là một interface data path giữa controller và các đĩa. Mỗi channel có thể có 2 đĩa, các thuật ngữ "master" và "slave" có thể sử dụng để gọi chúng, mặc dù cả 2 không có điều khiển lẫn nhau. Các đĩa ATA có thể được cấu hình như là master hoặc là slave sử dụng một physical jumper trên đĩa. Một vài đĩa có thể được cấu hình sử dụng "Cable Select", nơi mà chúng sẽ được gán như là master hoặc slave dựa trên plug nào mà chúng được gán trên ribbon cable. Hầu hết khách hàng có 2 channels và có thể hỗ trợ 4 ATA disks.
Các kiểu địa chỉ Sector
Để đọc và ghi dữ liệu, chúng ta cần đánh địa chỉ các sectors. Một sector đơn lẻ (single sector) sẽ được gán một địa chỉ mới sau mỗi lần partition, file system, hoặc file sử dụng nó. Địa chỉ mà chúng ta đang nhắc tới trong phần này là địa chỉ vật lý của nó. Địa chỉ vật lý của một sector là địa chỉ tương đối của nó sao với điểm bắt đầu của thiết bị vật lý.
Có 2 phương thức đánh địa chỉ vật lý khác nhau. Các đĩa cứng cũ hơn sử dụng hình dạng đĩa và phương thức CHS. Trong hình 2 chúng ta đã có nhắc tới phương thức này cũng như cách các địa chỉ cylinder và head được tổ chức.
Phương thức CHS nghe có vẻ khá tốt, nhưng thực tế là nó quá giới hạn và không được sử dụng nhiều. Các thông số kĩ thuật ban đầu của ATA sử dụng giá trị cylinder 16 bit, và gía trị 4 bit head , và 8-bit giá trị sector, nhưng các BIOS cũ hơn sử dụng giá trị cylinder có 10 bit, giá trị head 8 bit và giá trị sector 6 bit. Do đó, để giao tiếp với đĩa cứng thông qua BIOS, kích thước nhỏ nhất cho mỗi giá trị phải được sử dụng, những gì chỉ cho phép đĩa 504 MB.
Để "work around" với giới hạn 504MB này, các BIOS mới được phát triển mà có thể chuyển đổi (translate) các dải địa chỉ mà chúng thích tới các địa chỉ theo chuẩn của ATA. Ví dụ, nếu ứng dụng yêu cầu dữ liệu từ cylinder 8, head 4, và sector 32, BIOS có thể chuyển đổi và yêu cầu cylinder 26, head 2, sector 32 từ đĩa. Để cho việc chuyển đổi được thực hiện, BIOS sẽ phải report một hình dạng đĩa cứng mà khác với hình dạng tồn tại thực sự trên đĩa. Qúa trình chuyển đổi này sẽ không hoạt động cho các đĩa có dung lượng lớn hơn 8.1GB.
Các BIOS mà thực hiện việc chuyển đổi địa chỉ không còn phổ biến nữa, nhưng một investigator có thể sẽ phải đối mặt với những hệ thống này. Nếu anh ta lấy đĩa ra khỏi hệ thống và đặt nó vào trong hệ thống của anh ta, việc chuyển đổi có thể sẽ khác hoặc có thể không tồn tại. Và việc thu hồi hay dead analysis có thể không thực hiện được bởi vì các sectors sai sẽ được trả về. Để giải quyết vấn đề này, một investigator cần sử dụng hệ thống ban đầu hoặc tìm một hệ thống tương tự mà thực hiện việc chuyển đổi giống như hệ thống ban đầu. Một investigator có thể xác định nếu một hệ thống thực hiện việc chuyển đổi thông qua việc tìm kiếm phiên bản BIOS trên website nhà sản xuất hoặc thông qua việc tìm kiếm các thông tin liên quan trong BIOS.
Để khắc phục giới hạn 8.1 GB liên quan với sự chuyển đổi. Chúng ta chuyển qua sử dụng Logical Block Address (LBA) . LBA sử dụng một số đơn, bắt đầu từ 0, để đánh địa chỉ mỗi sector và đã được hỗ trợ từ thông số kĩ thuật ATA đầu tiên. Với LBA, software không cần biết bất cứ thứ gì về hình dạng; nó chỉ cần biết một số đơn. Hỗ trợ cho các địa chỉ CHS đã bị loại bỏ từ thông số kĩ thuật ATA trong ATA-6.
Không may mắn thay, một vài file system và các cấu trúc dữ liệu khác vẫn còn sử dụng địa chỉ CHS, vì vậy chúng ta cần phải chuyển đổi CHS sang LBA. Địa chỉ LBA 0 là địa chỉ CHS 0, 0, 1 và địa chỉ LBA 1 là địa chỉ CHS 0, 0, 2. Khi tất cả các sectors trong track được sử dụng, sector đầu tiên tại head tiếp theo trong cùng cylinder được sử dụng, đó là địa chỉ CHS 0, 1, 1. Bạn có thể hình dung đó là việc làm đầy vòng phía bên ngoài của đĩa cuối cùng, sau đó di chuyển lên các đĩa phía trên cho đến khi đạt đến đĩa trên đỉnh. Giải thuật chuyển đổi là
LBA = (((CYLINDER * heads_per_cylinder) + HEAD) * sectors_per_track) + SECTOR - 1
Trong đó bạn thay thế CYLINDER, HEAD, và SECTOR với các giá địa chỉ CHS tương ứng. Ví dụ, xét một đĩa mà có 16 heads trên một cylinder và 63 sectors trên một track. Nếu chúng ta có một địa chỉ CHS là cylinder 2, head 3, và sector 4, việc chuyển đổi qua LBA diễn ra như sau:
2208 = (((2 * 16) + 3) * 63) + 4 - 1
Các chuẩn Interface
Có rất nhiều thuật ngữ interface trong lĩnh vực đĩa cứng khách hàng, điều này có thể gây ra một chút nhầm lẫn. Một vài thuật ngữ có ý nghĩa giống nhau, thuật ngữ này dựa trên các tiêu chuẩn, thuật ngữ kia là do các công ty phần cứng đặt. Nói chung, các chuẩn mới thêm vào phương thức đọc và ghi nhanh hơn hoặc là chỉnh sửa các giới hạn về kích thước của các chuẩn phía trước.
Chú ý rằng các thông số kĩ thuật ATA chỉ áp dụng với các đĩa cứng. Removable media, ví dụ như CD-ROMs và ZIP disks, cần sử dụng một thông số kĩ thuật đặc biệt, được gọi là AT Attachment Packet Interface (ATAPI). Các thiết bị ATAPI sử dụng các cables và controller giống nhau, nhưng chúng yêu cầu các drivers đặc biệt.
Đây là một vài thông số kĩ thuật đáng chú ý và giúp ích cho investigation:
- ATA-1: Được công bố năm 1994. Thông số kĩ thuật này hỗ trợ CHS và 28-bit địa chỉ LBA.
- ATA-3: Được công bố năm 1997 và được thêm vào các tính năng khả tín và bảo mật. Seft-Monitoring Analysis and Reporting Technology (SMART) được đưa ra, đây là công nghệ mà cố gắng tăng cường tính khả tín thông qua việc giám sát một vài phần của đĩa. Passwords cũng được đưa ra trong tiêu chuẩn này.
- ATA/ATAPI-4: ATAPI, thông số kĩ thuật cho removable media, được tích hợp vào trong thông số kĩ thuật ATA trong ATA-4, được đưa ra vào năm 1998. Cable 80-dây được đưa ra để giúp giảm nhiễu. ATA-4 thêm vào HPA.
- ATA/ATAPI-6: được đưa ra vào năm 2002, thêm vào các địa chỉ LBA 48-bit, loại bỏ hỗ trợ các địa chỉ CHS, thêm vào DCO
- ATA/ATAPI-7: thông số kĩ thuật này vẫn còn là dạng bản thảo. Bản thảo này bao gồm serial ATA.
Disk Commands
Phần này cung cấp một overview về cách controller và đĩa cứng giao tiếp, điều này giúp ta khi thảo luận về hardware write protectors. Phần này không áp dụng cho các thiết bị ATAPI, ví dụ như CD-ROMs.
Controller phát ra các commands tới đĩa cứng thông qua ribbon cable. Các commands được phát tới cả hai đĩa trên cable, nhưng có một phần của command được dùng để nhận dạng nêú nó là master hay là slave. Controller giao tiếp với các đĩa cứng thong qua việc ghi vào các thanh ghi của nó, các thanh ghi này là những đoạn của bộ nhớ (pieces of memory). Các thanh ghi làm việc giống như một online order form ở đó controller ghi dữ liệu vào trong các thanh ghi giống như việc bạn điền dữ liệu vào trong các mục của form. Khi tất cả dữ liệu cần thiết đã được ghi vào các thanh ghi, controller ghi vào command register, và đĩa cứng xử lý command. Theo nguyên tắc, đĩa không làm bất cứ thứ gì cho đến khi command registẻ được ghi.
Ví dụ, xét tình huống mà ở đó controller muốn đọc một sector của đĩa. Nó có thể ghi địa chỉ sector và số lượng sector cần đọc trong các thanh ghi thích hợp. Sau khi các chi tiết command được ghi vào các thanh ghi, controller hướng dẫn (instruct) đĩa cứng thực thi hành động đọc thông qua việc ghi vào thanh ghi command.
Hard Disk Passwords
Thông số kĩ thuật ATA-3 đề ra các tính năng bảo mật lựa chọn mới, bao gồm passwords mà có thể được set thông qua BIOS hoặc các ứng dụng phần mềm khác nhau. Nếu triển khai, có 2 passwords trong các đĩa cứng, user và master passwords. Master password được thiết kế do đó quản trị viên công ty có thể truy cập vào máy tính trong trường hợp user password bị mất. Nếu các passwords được sử dụng, có 2 chế độ (modes) mà đĩa có thể hoạt động: cao (high) và cực đại (maximum). Trong chế độ bảo mật cao, user password có thể mở khóa (unlock) đĩa nhưng master password chỉ có thể unlock đĩa sau khi nội dung của đĩa bị xóa. Sau một số lần cố gắng đăng nhập password thất bại, đĩa sẽ đóng băng (freeze), và hệ thống sẽ cần phải rebooted.
Đĩa cứng sẽ yêu cầu SECURITY_UNCLOCK command được thực thi với password chính xác trước khi nhiều ATA command có thể được thực thi. Sau khi password đúng được nhập, đĩa hoạt động bình thường cho đến khi đĩa được tăt nguồn.
Một vài ATA commands vẫn được enabled trên đĩa cứng khi nó bị khóa, vì vậy nó có thể xuất hiện như là một đĩa hợp lệ khi được đưa vào máy tính. Tuy nhiên, khi bạn cố gắng đọc dữ liệu thực sự của user từ một đĩa bị khóa, nó sẽ hoặc sinh ra lỗi hoặc yêu cầu password. Có một vài chương trình miễn phí trên mạng sẽ cho bạn biết đĩa có bị khóa và sẽ cho phép bạn unlock nó với password. Có 2 chương trình đó là atapwd và hdunlock. Password có thể được set thông qua BIOS hoặc thông qua các ứng dụng phần mềm khác nhau. Một vài công ty khôi phục dữ liệu có thể bypass password thông qua việc mở đĩa.
Host Protected Area
Host Protected Area (HPA) là một vùng đặc biệt của đĩa có thể được sử dụng để lưu dữ liệu, và với cặp mắt quan sát bình thường sẽ không thấy nó. Kích thước của vùng này có thể được cấu hình sử dụng ATA commands, và nhiều đĩa mặc định kích thước là 0.
HPA được bổ sung trong ATA-4, và động lực để thực hiện đó là các nhà sãn xuất máy tính có thể lưu dữ liệu mà mà không thể bị xóa khi một user format và xóa nội dung đĩa cứng. HPA nằm ở cuối của đĩa và, khi được sử dụng, có thể chỉ được truy nhập thông qua việc cấu hình lại đĩa cứng.
Nào hãy cùng đi vào chi tiết hơn về HPA thông qua việc sử dụng ATA commands. Một vài trong số các commands tôi sẽ sử dụng có 2 versions phụ thuộc vào kích thước của đĩa, nhưng ta sẽ chỉ sử dụng một trong số chúng. Có 2 commands mà trả về các giá trị sector có thể đánh địa chỉ cực đại (maximum addressable sectors values), và nếu một HPA tồn tại kết quả trả về của chúng sẽ khác nhau. READ_NATIVE_MAX_ADDRESS command trả về địa chỉ vật lý tối đa, nhưng IDENTIFY_DEVICE command sẽ chỉ trả về số lượng các sectors mà user có thể truy xuất đến. Do đó, nếu một HPA tồn tại, READ_NATIVE_MAX_ADDRESS sẽ trả về kết thúc thật sự của đĩa và IDENTIFY_DEVICE command sẽ trả về kết thúc của vùng user (và bắt đầu của HPA). Chú ý phần trình bày tiếp theo sẽ chỉ ra rằng READ_NATIVE_MAX_ADDRESS không thường xuyên trả về địa chỉ vật lý cuối cùng của đĩa.
Để tạo một HPA, SET_MAX_ADDRESS command được sử dụng để set địa chỉ tối đa tới những gì user có thể truy xuất. Để loại bỏ HPA, SET_MAX_ADDRESS phải được thực thi một lần nữa với kích thước thực sự của đĩa, thông tin này có thể tìm thấy thông qua sử dụng command READ_NATIVE_MAX_ADDRESS.
Ví dụ, nếu có một đĩa 20GB, READ_NATIVE_MAX_ADDRESS sẽ trả về một sector count của 20GB (ví dụ là 41,943,040). Để tạo 1GB host protected area, chúng ta thực thi SET_MAX_ADDRESS với một địa chỉ 39,845,888 . Bất cứ một cố gắng nào để đọc hay ghi dữ liệu tới 2,097,152 sectors cuối cùng sẽ sinh ra lỗi, và IDENTIFY_DEVICE command sẽ trả về một địa chỉ cực đại 39,845,888. Chúng ta có thể nhìn vào hình phía dưới. Để loại bỏ HPA, chúng ta có thể set SET_MAX_ADDRESS với full sector count.
Hình 3: 1 GB HPA trong 20GB đĩa
Một trong các thiết lập của SET_MAX_ADDRESS command là một 'volatility' bit, khi được set, làm cho HPA tồn tại sau khi đĩa cứng được reset hoặc power cycled. Cũng có một tập hợp của các locking commands trong thông số kĩ thuật ATA mà ngăn cản các sự thay đổi tới địa chỉ tối đa cho đến lần reset tiếp theo. Nó cho phép BIOS đọc và ghi một vài dữ liệu trong host protected area khi hệ thống được powered up, set HPA như vậy thì user không thể nhìn thấy dữ liệu, và lock vùng này lại vì thế nó không thể bị thay đổi. Thậm chí một password có thể được sử dụng (password này khác với password được sử dụng cho việc truy xuất đĩa.)
Tổng kết lại, một đĩa cứng có thể có một HPA chứa các system files, thông tin ẩn, hoặc cả hai. Có phát hiện sự tồn tại của HPA thông qua việc so sánh 2 ATA commands. Để loại bỏ nó, địa chỉ tối đa của đĩa cứng phải được reset, nhưng thiết lập volatility cho phép thay đổi tạm thời.
Device Configuration Overlay
Dữ liệu ngoài được ẩn trong một HPA, dữ liệu có thể được ẩn sử dụng Device Configuration Overlay (DCO) . DCO được bổ sung vào ATA-6 và cho phép giới hạn khả năng của đĩa cứng. Mỗi thông số kĩ thuật ATA có các đặc tính lựa chọn mà một đĩa có thể hay không triển khai. Máy tính sử dụng sử dụng IDENTIFY_DEVICE command để xác định các đặc tính nào mà một đĩa cứng có thể hỗ trợ. Một DCO có thể làm cho IDENTIFY_DEVICE command hiển thị các đặc tính được hỗ trợ mà không được hỗ trợ và hiển thị một kích thước đĩa nhỏ hơn những gì chúng có.
Hãy cùng nhìn vào một vài DCO commands. DEVICE_CONFIGURATION_IDENTIFY command trả về các đặc tính thực sự và kích thước của một đĩa. Do đó, chúng ta có thể phát hiện một DCO thông qua việc so sánh các outputs của DEVICE_CONFIGURATION_IDENTIFY và IDENTIFY_DEVICE. Hơn nữa, nhắc lại READ_NATIVE_MAX_ADDRESS command trả về kích thước của đĩa sau một HPA. Chúng ta có thể phát hiện một DCO mà ẩn các sectors thông qua việc so sánh output của READ_NATIVE_MAX_ADDRESS với DEVICE_CONFIGURATION_IDENTIFY.
Ví dụ, xét một đĩa 20GB ở đó một DCO có địa chỉ tối đa được set tới 19GB. READ_NATIVE_MAX_ADDRESS và IDENTIFY_DEVICE hiển thị đĩa chỉ có 19GB. Nếu 1GB HPA cũng được tạo, IDENTIFY_DEVICE command hiển thị kích thước của đĩa là 18GB. Chúng ta có thể nhìn thấy trong hình dưới đây:
Hình 4. Một DCO có thể ẩn các sectors ở phần cuối của đĩa, ngoài việc ẩn các sectors thông qua HPA
Để tạo hoặc thay đổi một DCO, DEVICE_CONFIGURATION_SET command được sử dụng. Để loại bỏ một DCO, DEVICE_CONFIGURATION_RESET command được sử dụng. Không giống như HPA, không có lựa chọn biến động (volatile option) mà cho phép thiết bị thay đổi các thiết lập cho một phiên. Tất cả các thay đổi DCO là vĩnh viễn thông qua resets và power cycles.Serial ATA
Làm việc với các thiết bị ATA có những bất lợi của nó. Các cables quá lớn, không mềm dẻo, và có các connectors ở những nơi mà bạn thường xuyên không muốn chúng ở đó. Các đĩa cứng còn có thể khó khăn để cấu hình với master và slave jumpers. Cable và tốc độ của interface là một vài động lực ẩn sau việc phát triển Serial ATA, những gì bao gồm trong thông số kĩ thuật ATA-7.
Interface được gọi là serial bởi vì chỉ một bit thông tin được vận chuyển giữa controller và đĩa cứng ở một thời điểm, khi so sánh với 16 bits tại một thời điểm với interface ban đầu, hoặc parallel ÂTA. Các serial ATA connectors bằng 1/4 so với kích thước của parallel ATA connectors và chúng chỉ có 7 contacts. Mỗi thiết bị serial ATA được kết nối trực tiếp tới controller, và không có sự móc nối của các thiết bị.
Serial ATA được thiết kế mà một controller mới có thể được đặt trong một máy tính, và máy tính không biết gì về sự khác biệt giữa ATA ban đầu (parallel ATA ) và serial ATA mới. Thực tế, serial ATA controller có các registers mà làm cho máy tính nghĩ rằng nó đang nói chuyện với một đĩa parallel ATA. Host computer coi mỗi đĩa được kết nối tới serial ATA controller như là một đĩa master trên channel của nó.
BIOS và Truy cập trực tiếp
Chúng ta đã thảo luận về cách các đĩa cứng ATA làm việc và cách chúng được điều khiển, chúng ta cần thảo luận về cách phần mềm giao tiếp với chúng bởi vì điều này có thể tạo ra các vấn đề khi muốn thu thập dữ lieu trên đĩa. Có 2 phương thức mà phần mềm có thể sử dụng để truy cập đĩa: trực tiếp thông qua hard disk controller hoặc thông qua BIOS.
Truy cập trực tiếp đến Controller
Chúng ta đã thấy trong phần trước là đĩa cứng được kết nối tới một hard disk controller, là một thành phần phát đi các commands tới đĩa cứng sử dụng ribbon cable. Một kĩ thuật cho việc đọc và ghi dữ liệu là cho phần mềm giao tiếp trực tiếp với hard disk controller, những gì sau đó giao tiếp với đĩa cứng.
Để giao tiếp theo cách này, phần mềm cần biết cách address controller và cách phát các commands tới nó. Ví dụ, phần mềm cần biết command code cho hành động đọc là gì, và nó cần biết cách nhận dạng các sectors nào cần đọc. Phần mềm sẽ còn phải query đĩa cứng để có được các chi tiết như kiểu và kích cỡ.
Truy cập BIOS tới Controller
Truy cập đĩa cứng trực tiếp là cách nhanh nhất để có được dữ liệu từ đĩa, nhưng nó yêu cầu phần mềm phải biết chút ít về phần cứng. Một trong các công việc của BIOS là ngăn cho phần mềm phải biết các chi tiết này. BIOS biết về hardware, và nó cung cấp các dịch vụ tới phần mềm vì vậy chúng có thể giao tiếp dễ dàng với hardware.
Nhắc lại phần "Boot Code Locations" mà BIOS được sử dụng khi máy tính khởi động. BIOS thực hiện nhiều công việc trong quá trình boot, nhưng có 2 công việc cần nhắc tới khi thảo luận ở đây. Công việc liên quan thứ nhất là việc nó xác định chi tiết của các đĩa đã được cài đặt hiện hành. Công việc liên quan thứ 2 đó là nó nạp bảng ngắt (interrupt table), bảng này được dùng để cung cấp dịch vụ tới hệ điều hành và phần mềm.
Để sử dụng các dịch vụ đĩa cứng BIOS, phần mềm phải nạp dữ liệu, ví dụ như địa chỉ sector hoặc các kichs thước, vào trong các thanh ghi CPU và thực thi software interrupt command 0x13 (thường được gọi là INT13h). Software interrupt command làm cho processor nhìn vào bảng ngắt và định vị được code mà sẽ xử lý yêu cầu dịch vụ. Table entry cho interrupt 0x13 chứa địa chỉ của BIOS code mà sẽ sử dụng kiến thức của nó để giao tiếp với controller. Về cơ bản, BIOS làm việc như người đứng giữa phần mềm và phần cứng.
INT13h thực sự là một dạng của các hàm đĩa (disk funtions) và bao gồm các hàm mà ghi lên đĩa, đọc từ đĩa, format các tracks trên đĩa, và query đĩa để lấy thông tin. Các hàm INT13h nguyên thủy cho việc đọc và ghi sử dụng các địa chỉ CHS và cho phép phần mềm truy cập một đĩa mà chỉ có 8.1GB hoặc ít hơn. Để khắc phục giới hạn này, các tính năng mới được thêm vào INT13h trong BIOS, được gọi là "extended INT13h."
Các hàm INT13h mở rộng yêu cầu BIOS code mới và sử dụng đĩa chỉ LBA 64-bit. Vì các lý do tương thích, các hàm CHS vẫn được duy trì, và phần mềm phải được viết lại để có thể sử dụng được các tính năng mới.
SCSI Drives
Phần này cung cấp một overview về SCSI, tập trung vào các kiểu khác nhau, và mô tả nó khác với ATA như thế nào. Các đĩa cứng SCSI không phổ biến bằng ATA trên các máy tính người dùng, nhưng nó là chuẩn trên hầu hết servers.
Giống như ATA, có nhiều thông số kĩ thuật của SCSI, các tiêu chuẩn này được công bố bởi T10 Technical Committee. Có 3 thông số kĩ thuật SCSI, SCSI-1, SCSI-2, SCSI-3. SCSI-3 thực sự bao gồm nhiều thông số kĩ thuật nhỏ hơn.
SCSI versus ATA
Có những sự khác biệt ở cả mức cao và mức thấp giữa SCSI và ATA. Các sự khác biệt cấp cao rõ ràng nhất đó là nhiều kiểu connector. Với ATA, chỉ có các connectors 40 và 44-pin, nhưng SCSI có nhiều hình dạng và kiểu dáng. SCSI cables có thể dài hơn ATA cables và có thể có nhiều hơn 2 thiết bị trên cùng một cable. Mỗi thiết bị trên SCSI cable cần một số ID duy nhất, số này có thể được cấu hình với các jumpers trên đĩa hoặc với phần mềm. Nhiều đĩa SCSI cũng có một jumper để làm cho đĩa chỉ đọc (read only), tính năng này giống như ATA write blocker. Các ATA write blockers là các thiết bị bên ngoài mà block các write commands.
Sự khác biệt mức thấp đầu tiên giữa ATA và SCSI đó là SCSI không có một controller. ATA interface đã được thiết kế để cho một single controller nói cho một hoặc hai đĩa cứng những gì cần làm. SCSI đã được thiết kế như là một bus ở đó các thiết bị khác nhau giao tiếp lẫn nhau và các thiết bị không bị giới hạn tới các đĩa cứng. Với một cấu hình SCSI, card mà được gắn vào trong máy tính không phải là một controller bởi vì mỗi thiết bị trên SCSI cable là có vai trò như nhau và có thể tạo ra các requests lẫn nhau.
Giống như ATA, SCSI chuẩn là parallel và dữ liệu di chuyển theo các khối 8-bit và 16-bit. Còn nữa, SCSI giống ATA ở chỗ nó cũng có một phiên bản serial, nó được xác định trong thông số kĩ thuật serial attached SCSI.
Các kiểu SCSI
Sự khác nhau giữa các phiên bản SCSI tóm lại ở chỗ có bao nhiêu bit được truyền đi tại một thời điểm, tần số của các tín hiệu trên cable (tốc độ của vận chuyển), và các kiểu tín hiệu được sử dung. Các kiểu SCSI cũ hơn có một phiên bản bình thường (normal version) và một phiên bản mở rộng (wide version), ở đó phiên bản bình thường vận chuyển 8 bits tại một thời điểm và phiên bản mở rộng vận chuyển 16 bits tại một thời điểm. Ví dụ, một thiết bị Ultra SCSI thực hiện một việc vận chuyển 8-bit và một thiết bị Wide Ultra SCSI thực hiện việc vận chuyển 16-bit, không cần đưa ra sự khác biệt giữa phiên bản bình thường và mở rộng.
Sự khác biệt thứ 2 trong các phiên bản SCSI đó là tốc độ của các tín hiệu trong cable. Bảng phía dưới đây đưa ra tên của các kiểu SCSI, tốc độ, và tỉ lệ vận chuyển đối với bus 8-bit bình thường và bus 16-bit mở rộng.
Bảng 1. Tốc độ khác biệt giữa các kiểu SCSI khác nhau
Bên trong mỗi kiểu này, có những cách khác nhau mà dữ liệu được biểu trên dây (wire). Cách thức rõ ràng nhất là single ended (SE) , theo cách thức này một điện áp cao được đặt trên dây nếu 1 được vận chuyển và không có điện áp được đặt trên dây nếu 0 được vận chuyển. Phương thức này tạo ra một vấn đề tại các tốc độ cao và với các cable dài hơn bởi vì tín hiệu điện không thể ổn định tại tốc độ cao và các dây có thể làm nhiễu sóng những dây khác.
Phương thức thứ 2 để vận chuyển dữ liệu được gọi là differential voltage, và mỗi bit thực sự yêu cầu 2 dây. Nếu một bit 0 được vận chuyển, không có điện áp được áp dụng cho cả 2 dây. Nếu một bit 1 được vận chuyển, một điện áp dương được áp dụng cho một dây và điện áp ngược được áp dụng cho dây thứ 2. Khi một thiết bị đọc các tín hiệu từ cable, nó có được sự khác biệt giữa 2 dây. Một lựa chon tín hiệu high voltage differential (HVD) tồn tại trong SCSI từ phiên bản đầu tiên và một lựa chọn tín hiệu low voltage differential (LVD) sử dụng một tín hiệu nhỏ hơn, tồn tại từ Ultra2 SCSI, và là kiểu tín hiệu chính cho các đĩa mới. Bảng phía dưới chỉ ra các kiểu SCSI mà sử dụng các kiểu tín hiệu khác nhau.

Bảng 2. Các kiểu tín hiệu mà có thể tìm thấy trong mỗi kiểu SCSI
Điều quan trọng đó là bạn không trộn (mix) các kiểu tín hiệu khác nhau. Bạn có thể gây ra các đe dọa cho các thiết bị của bạn khi bạn kết nối các thiết bị SE tới các thiết bị HVD và một vài thiết bị LVD. Một vài đĩa LVD tương thích với SE, vì vậy chúng có thể được sử dụng trong môi trường SE mà không gây ra mối đe dọa nào, nhưng chúng chỉ hoạt động tại các tốc độ mà các thiết bị SE sử dụng. Có một vài biểu tượng trên các thiết bị SCSI mà nhận dạng kiểu tín hiệu chúng sử dụng. Đảm bảo rằng tất cả các thiết bị có cùng một biểu tượng hoặc là các biểu tượng tương thích. Các biểu thực được biểu diễn qua hình dưới.
Hình 5. Các biểu tượng của các kiểu tín hiệu SCSI. (A) là các thiết bị SE, (B) là các thiết bị LVD, (C) là các thiết bị cho cả SE và LVD tương thích, và (D) là các thiết bị HVD.
Các kiểu Connector
Có nhiều kiểu SCSI connectors, nhưng chỉ có một vài kiểu mà chúng ta thường xuyên gặp. Nói chung, các drives có một bus 8-bit có một cable 50-pin, và cũng có các drives có một bus 16-bit có cable 68-bit. Adaptor 68-bit mật độ cao (high-density 68-bit adaptor) là cái được sử dụng phổ biến nhất, và nó có kích thước bình thường và kích thước mật độ rất cao, nhưng kích thước bình thường là phổ biến nhất và có thể thấy trong hình phía dưới đây. Adaptor 68-bit được sử dụng cho cả các tín hiệu LVD và SE, nhưng cable vật lý cho các kiểu tín hiệu khác nhau là khác nhau. Kiểm tra thông tin trên cable để ngăn các vấn đề này.
Hình 6. Một điã SCSI với một adaptor 68-pin
Một biến thể khác của connector 68-pin mật độ cao là Single Connector Attachment (SCA) connector. Mục đích của connector này là cung cấp power và các dây dữ liệu trong một connector, điều này có thể giúp dễ dàng swap các drives trong một server. Connector này có 80 pins và bao gồm các pins cho power và để cấu hình đĩa. Một bức hình cho loại connector này các bạn có thể thấy ở phía dưới
Hình 7. Một đĩa SCSI với một SCA connector
Có nhiều adaptors cho các kiểu SCSI connectors khác nhau, và các thiết bị SCSI được giả định với sự tương thức ngược. Tuy nhiên, không phải tất cả adaptor và các cấu hình thiết bị có thể làm việc. Nếu thiết lập làm việc, nó sẽ run với tốc độ của thiết bị thấp nhất. Hãy nhớ rằng đừng trộn bất cứ thiết bị HVD với các thiết bị LVD và SE mà không có các thiết bị adaptors hợp lý và chỉ trộn các thiết bị LVD và SE nếu các thiết bị LVD có thể run trong chế độ SE.
Size Barriers
Các đĩa SCSI không phải chịu các giới hạn về kích thước như các đĩa ATA bởi vì thông số kĩ thuật SCSI thường xuyên sử dụng các địa chỉ LBA 32-bit và 64-bit. Mặc dù, giới hạn kích thước của BIOS (nếu bạn đang sử dụng INT13h) hoặc file system có thể nhỏ hơn những gì SCSI hỗ trợ, và chúng sẽ là nhân tố giơí hạn.
Khi sử dụng thông qua BIOS, SCSI controller chuyển đổi (translate) một địa chỉ CHS sang một địa chỉ LBA. Các controller khác nhau có thể sử dụng các kĩ thuật ánh xạ khác nhau, nhưng nhiều trong số chúng chọn một kĩ thuật dựa trên hình dạng được mô tả bởi các entries trong một bảng partition. Có thể cho một investigator có một controller trong hệ thống thu hồi của anh ta mà không tiến hành một ánh xạ tương tự như controller ban đầu, vì vậy đĩa cần được yêu cầu sử dụng truy cập trực tiếp và không sử dụng BIOS.
Thứ Bảy, 26 tháng 4, 2014
4 năm nhìn lại!
Bữa nào chán học là lại có tâm trạng muốn lảm nhảm :)
2010-2014 sắp đi hết chặng đường đại học. Thời gian trôi nhanh, như mới ngay đây thôi còn là một con người chập chững những bước đầu sau 12 năm đèn sách. Giờ đây là 22 tuổi, là sinh viên năm cuối, sắp ra trường và đang chuẩn bị bước vào những thử thách căng go.
Suốt 4 năm, nhiều sự việc xảy ra, có những điều tạm hài lòng cũng như những điều hối tiếc. Hãy nói về những điều hối tiếc trước. Có thể hối tiếc lớn đó là chưa được hưởng cảm giác ở kí túc xá. Nhiều chuyện vui được nghe kể lại mà cứ muốn mình là người trong cuộc một lần. Điều hài lòng trong suốt 4 năm là trong mình luôn duy trì được sự cố gắng, luôn nỗ lực dù đôi khi vẫn có sự hoang mang về con đường mình chọn, và tính cách thiếu cẩn thận liệu có phù hợp với ngành nghề theo đuổi. Bốn năm ở trường đối với mình vẫn là những ngày tháng ý nghĩa, có bạn bè, có những buổi chiều chạy bộ, đá banh, có những buổi đi chơi xa. Những kỉ niệm về chuyến phượt của 6 thằng gần 600 cây, leo 2 cái ngọn núi.Về chuyến đi chơi xa với lớp mà chắc sẽ khó có thể nào quên. Nhiều lúc muốn tua lại về những khoảng thời gian ấy để sống lại những năm tháng ấy một lần nữa. Năm 4 cái năm quyết định có thể nói là như vậy phía trước là đợt thực tập, tốt nghiệp, may mắn ra được trường thì phía trước vẫn là một chặng đường, có những tia sáng, nhưng cũng có sự chông gai đang chờ đợi.
Sẽ không thể quên những tuyến xe buýt, những lần ngủ gật trên xe buýt :D, những lúc đi học về trên xe buýt vào buổi tối được ngắm được phố những trải nghiệm đó phải nói là tuyệt. Nhiều lúc chẳng biết đường xá vì cái tội đi xe buýt nhiều. Nhớ những bữa nhậu nhẹt cùng đám bạn, những bữa nhậu bắt đầu từ năm nhất khi chỉ vì thích hay là vì thằng bạn thất tình rủ nhậu, nói chung là vui vẻ và gắn kết anh em rất nhiều :). Những buổi chiều chạy bộ ở sân trường là những lần không thể quên, mỗi chiều là một sự hào hứng khi được chạy bộ, ở đó có thể 8 chuyện tào lào với mấy thằng bạn, khi là chuyện học hành, lúc là chuyện hát hò, guitar... những buổi đá banh trên sân cờ có lúc đến rát cả chân mà vẫn đá. Tất cả dù nhiều hay it, không theo trình tự tất cả đã được xắp lại trong trí nhớ, chỉ trong năm nay thôi là phải chia tay thời sinh viên, chia tay bạn bè, mái trường... Sẽ vẫn luôn nhớ.
2010-2014 sắp đi hết chặng đường đại học. Thời gian trôi nhanh, như mới ngay đây thôi còn là một con người chập chững những bước đầu sau 12 năm đèn sách. Giờ đây là 22 tuổi, là sinh viên năm cuối, sắp ra trường và đang chuẩn bị bước vào những thử thách căng go.
Suốt 4 năm, nhiều sự việc xảy ra, có những điều tạm hài lòng cũng như những điều hối tiếc. Hãy nói về những điều hối tiếc trước. Có thể hối tiếc lớn đó là chưa được hưởng cảm giác ở kí túc xá. Nhiều chuyện vui được nghe kể lại mà cứ muốn mình là người trong cuộc một lần. Điều hài lòng trong suốt 4 năm là trong mình luôn duy trì được sự cố gắng, luôn nỗ lực dù đôi khi vẫn có sự hoang mang về con đường mình chọn, và tính cách thiếu cẩn thận liệu có phù hợp với ngành nghề theo đuổi. Bốn năm ở trường đối với mình vẫn là những ngày tháng ý nghĩa, có bạn bè, có những buổi chiều chạy bộ, đá banh, có những buổi đi chơi xa. Những kỉ niệm về chuyến phượt của 6 thằng gần 600 cây, leo 2 cái ngọn núi.Về chuyến đi chơi xa với lớp mà chắc sẽ khó có thể nào quên. Nhiều lúc muốn tua lại về những khoảng thời gian ấy để sống lại những năm tháng ấy một lần nữa. Năm 4 cái năm quyết định có thể nói là như vậy phía trước là đợt thực tập, tốt nghiệp, may mắn ra được trường thì phía trước vẫn là một chặng đường, có những tia sáng, nhưng cũng có sự chông gai đang chờ đợi.
Sẽ không thể quên những tuyến xe buýt, những lần ngủ gật trên xe buýt :D, những lúc đi học về trên xe buýt vào buổi tối được ngắm được phố những trải nghiệm đó phải nói là tuyệt. Nhiều lúc chẳng biết đường xá vì cái tội đi xe buýt nhiều. Nhớ những bữa nhậu nhẹt cùng đám bạn, những bữa nhậu bắt đầu từ năm nhất khi chỉ vì thích hay là vì thằng bạn thất tình rủ nhậu, nói chung là vui vẻ và gắn kết anh em rất nhiều :). Những buổi chiều chạy bộ ở sân trường là những lần không thể quên, mỗi chiều là một sự hào hứng khi được chạy bộ, ở đó có thể 8 chuyện tào lào với mấy thằng bạn, khi là chuyện học hành, lúc là chuyện hát hò, guitar... những buổi đá banh trên sân cờ có lúc đến rát cả chân mà vẫn đá. Tất cả dù nhiều hay it, không theo trình tự tất cả đã được xắp lại trong trí nhớ, chỉ trong năm nay thôi là phải chia tay thời sinh viên, chia tay bạn bè, mái trường... Sẽ vẫn luôn nhớ.
Thứ Năm, 17 tháng 4, 2014
Love is Sharing: Windows XP Boot Process
Love is Sharing: Windows XP Boot Process: Sau đây mình sẽ mô tả tiến trình boot trong Windows XP Sau khi đã được cấp nguồn điện, một máy tính chạy Windows XP sẽ thực hiện các bước ...
Thứ Tư, 16 tháng 4, 2014
Windows XP Boot Process
Sau đây mình sẽ mô tả tiến trình boot trong Windows XP
Sau khi đã được cấp nguồn điện, một máy tính chạy Windows XP sẽ thực hiện các bước sau:
1. Nguồn cung cấp điện tự kiểm tra chính nó và gửi đi một tín hiệu năng lượng tốt (power-good signal) tới bộ vi xử lý
2. chip thời gian ngưng việc gửi cá tín hiệu reset tới bộ vi xử lý, cho phép CPU bắt đầu các hoạt động.
3. CPU nạp ROM BIOS bắt đầu tại địa chỉ bộ nhớ ROM FFFF:0000
4. ROM BIOS chứa một lệnh JMP (jmp) mà trỏ tới địa chỉ thực sự của ROM BIOS code.
5. ROM BIOS thực hiện các kiểm tra cơ bản trên phần cứng trung tâm để kiểm tra các chức năng cơ bản.
6. BIOS tìm kiếm các adapters cần thiết để nạp các ROM BIOS routines của riêng chúng
7. Startup BIOS routines quét qua các địa chỉ từ C000:0000 đến C780:0000 để tìm ra video ROM
8. ROM BIOS kiểm tra xem nếu đó là cold boot hay là một warm boot
9. Nếu đó là một cold boot, ROM BIOS thực thi trọn vẹn POST (power-on self-test). Nếu đó là một warm boot, phần kiểm tra bộ nhớ của POST bị tắt đi.
10. POST có thể bị chia ra thành 2 thành phần:
Sau khi đã được cấp nguồn điện, một máy tính chạy Windows XP sẽ thực hiện các bước sau:
1. Nguồn cung cấp điện tự kiểm tra chính nó và gửi đi một tín hiệu năng lượng tốt (power-good signal) tới bộ vi xử lý
2. chip thời gian ngưng việc gửi cá tín hiệu reset tới bộ vi xử lý, cho phép CPU bắt đầu các hoạt động.
3. CPU nạp ROM BIOS bắt đầu tại địa chỉ bộ nhớ ROM FFFF:0000
4. ROM BIOS chứa một lệnh JMP (jmp) mà trỏ tới địa chỉ thực sự của ROM BIOS code.
5. ROM BIOS thực hiện các kiểm tra cơ bản trên phần cứng trung tâm để kiểm tra các chức năng cơ bản.
6. BIOS tìm kiếm các adapters cần thiết để nạp các ROM BIOS routines của riêng chúng
7. Startup BIOS routines quét qua các địa chỉ từ C000:0000 đến C780:0000 để tìm ra video ROM
8. ROM BIOS kiểm tra xem nếu đó là cold boot hay là một warm boot
9. Nếu đó là một cold boot, ROM BIOS thực thi trọn vẹn POST (power-on self-test). Nếu đó là một warm boot, phần kiểm tra bộ nhớ của POST bị tắt đi.
10. POST có thể bị chia ra thành 2 thành phần:
- một video test khởi tạo video adapter
- một video adapter kiểm tra video card và video memory, và hiển thị thông tin cấu hình hoặc bất cứ lỗi nào
11. BIOS xác định vị trí và đọc thông tin cấu hình được lưu trong CMOS.
12. BIOS phân tích đĩa để tìm master boot record (MBR)
13. Với một MBR hợp lệ được nạp vào trong bộ nhớ, BIOS chuyển quyền điều khiển của boot process tới partition loader code.
14. Partition loader, hoặc boot loader, phân tích partition table để tìm ra một partition active.
15. Partition loader sau đó tìm kiếm boot record trong mọi sector đầu tiên của partition đó.
16. Boot record của active partition được kiểm tra để xem có boot signature hợp lệ hay không, nếu tìm thấy, boot sector code được thực thi như một chương trình
17. NTLDR, một file hệ thống ẩn trong thư mục root của system partition, điều khiển việc nạp Windows XP trong 4 chặng:
- chặng khởi tạo boot-loader: NTLDR chuyển processor từ real mode sang protected mode, những gì đặt processor trong 32-bit memory mode và bật memory paging lên. Nó sau đó nạp các file system drivers thích hợp để cho phép NTLDR nạp các files từ một partition định dạng với bất cứ file systems nào được hỗ trợ bởi XP. Nếu file BOOT.INI được đặt trong thư mục root, NTLDR sẽ đọc nội dung của nó trong bộ nhớ.
- chọn lựa hệ điều hành: nếu BOOT.INI chứa các entries cho nhiều hơn một hệ điều hành, NTLDR sẽ dừng trình tự boot tại điểm này. Một user có thể nhấn F8 ở chặng này của thứ tự boot để hiển thị các tùy chọn boot
- Phát hiện phần cứng: nếu OS được chọn là XP, NTLDR xác định vị trí và nạp chương trình NTDETECT.COM dựa trên DOS để thực hiện việc phát hiện phần cứng. Nếu máy tính này có nhiều hơn một hardware profile đã được định nghĩa trước, NTLDR sẽ dừng lại tại điểm này và hiển thị Hardware Profiles/Configuration Recovery menu. Sau khi người dùng chọn một cấu hình phần cứng, NTLDR bắt đầu nạp XP kernel (NTOSKRNL.EXE)
- Chọn cấu hình: NTLDR bây giờ nạp các device drivers đã được đánh dấu như là boot devices. Sau khi nạp các drivers này, NTLDR từ bỏ quyền điều khiển tới các device drivers
18. NTOSKRNL đi qua 2 chặng trong quá trình boot của nó
- Chặng 0: XP disable các ngắt trong suốt chặng 0 và enable chúng trước chặng 1.Tầng trừu tượng phần cứng (HAL) được gọi để chuẩn bị interrupt controller.
- Chặng 1: Tất cả excutive subsystems được khởi tạo lại theo thứ tự sau:
- Object manager
- Executive
- Microkernel
- Security Reference Monitor
- Virtual Memory Manager
- Cache Manager
- Local Procedure Calls (LPCs)
- I/O Manager
- Process Manager
- đầu tiên nó nạp boot devices
- nó nối một danh sách các drivers được ưu tiên và cố gắng nạp mỗi driver lần lượt
- nó khởi động Session Manager Subsystem (SMSS).
- SMSS nạp win32k.sys device driver, những gì implement Win32 graphics subsystem.
21. các services subsystem khởi động tất cả các services được đánh dấu như Auto Start
22. Mỗi khi tất cả các thiết bị và các dịch vụ được khởi động , boot được coi như là thành công , và cấu hình này được lưu vào như là cấu hình tốt nhất cuối cùng
23. file WINLOGON.EXE khởi động logon process. nó là một login manager file chịu trách nhiệm cho tất cả các thủ tục login và logout.
24. Local Security Authority (LSASS.EXE) process hiển thị hộp thoại logon.
Thứ Sáu, 4 tháng 4, 2014
[Computer Forensic] CD-ROM/DVD File Systems
Dữ liệu lưu trên CD-ROM/DVDs được chia thành 2 sectors. Các sectors này chứa cả dữ liệu người dùng (user data) lẫn các mã điều khiển lỗi (error detection codes). Users không cần phải lo lắng về những dữ liệu nào được lưu ở sector nào, nhưng users nên trang bị kiến thức về cấu trúc file trong CD-ROM/DVDs.
ISO 9660
ISO 9660 định nghĩa một file system cho CD-ROM/DVD media. Nó hướng đến việc hỗ trợ cho nhiều hệ điều hành khác nhau, ví dụ như Microsoft Windows, MAC OS, và UNIX, để cho phép trao đổi dữ liệu giữa nhiều hệ điều hành khác nhau.
ISO 9660 Specifications
Có một vùng được dự trữ với kích thước là 32,768 bytes nằm ở phần đầu của đĩa. Vùng lưu trữ này không được nhắc tới trong chuẩn ISO 9660, nhưng nó thường được sử dụng để lưu trữ các thông tin để boot hệ thống trên các các CD-ROM/DVDs có thể boot (bootable CD-ROM/DVDs ).
Volume Descriptors Nằm ngay phía sau, một chuỗi volume descriptors mô tả chi tiết những nội dung và kiểu thông tin được lưu trên đĩa.
Một volume descriptor mô tả các thuộc tính của thông tin file system tên CD-ROM/DVDs cho trước. Nó được chia thành 2 phần: kiểu của volume descriptor và các thuộc tính của descriptor.
Một volume descriptor được xây dựng theo cách mà nếu một chương trình đọc một disk không hiểu về một descriptor cụ thể nào, nó có thể bỏ qua descriptor đó cho đến khi nó tìm thấy một descriptor mà nó có thể nhận dạng, do vậy nó cho phép việc sử dụng nhiều kiểu thông tin trên một CD-ROM/DVDs. Còn nữa, nếu có một lỗi làm cho descriptor không thể đọc được, một bản sao dư thừa của một descriptor sẽ được sử dụng cho việc khôi phục lỗi.
Một đĩa theo chuẩn ISO 9660 chứa ít nhất một primary descriptor mô tả ISO 9660 file system và một terminating descriptor ám chỉ cuối của chuỗi descriptor. Joliet và UDF là những ví dụ của các file systems thêm vào nhiều descriptors tới chuỗi này.
Primary volume descriptor hoạt động giống như là superblock trên UNIX file system, cung cấp các chi tiết trên các vùng trên đĩa theo chuẩn ISO 9660. Chứa bên trong primary volume descriptor là root directory record mô tả vị trí của root directory. Directory entries được lưu bên trong vùng này. Root directory được lưu trữ như một mở rộng, hoặc một chuỗi tuần tự các sectors, mà chứa mỗi directory entries xuất hiện trong root. Ngoài ra, bởi vì ISO 9660 hoạt động thông qua việc phân chia CD-ROM/DVD thành các khối logic (logical blocks), kích thước của các blocks này được tìm thấy trong primary volume descriptor.
Trường đầu tiên trong một volume descriptor là volume descriptor type, nó có thể có các giá trị sau:
ISO 9660
ISO 9660 định nghĩa một file system cho CD-ROM/DVD media. Nó hướng đến việc hỗ trợ cho nhiều hệ điều hành khác nhau, ví dụ như Microsoft Windows, MAC OS, và UNIX, để cho phép trao đổi dữ liệu giữa nhiều hệ điều hành khác nhau.
ISO 9660 Specifications
Có một vùng được dự trữ với kích thước là 32,768 bytes nằm ở phần đầu của đĩa. Vùng lưu trữ này không được nhắc tới trong chuẩn ISO 9660, nhưng nó thường được sử dụng để lưu trữ các thông tin để boot hệ thống trên các các CD-ROM/DVDs có thể boot (bootable CD-ROM/DVDs ).
Volume Descriptors Nằm ngay phía sau, một chuỗi volume descriptors mô tả chi tiết những nội dung và kiểu thông tin được lưu trên đĩa.
Một volume descriptor mô tả các thuộc tính của thông tin file system tên CD-ROM/DVDs cho trước. Nó được chia thành 2 phần: kiểu của volume descriptor và các thuộc tính của descriptor.
Một volume descriptor được xây dựng theo cách mà nếu một chương trình đọc một disk không hiểu về một descriptor cụ thể nào, nó có thể bỏ qua descriptor đó cho đến khi nó tìm thấy một descriptor mà nó có thể nhận dạng, do vậy nó cho phép việc sử dụng nhiều kiểu thông tin trên một CD-ROM/DVDs. Còn nữa, nếu có một lỗi làm cho descriptor không thể đọc được, một bản sao dư thừa của một descriptor sẽ được sử dụng cho việc khôi phục lỗi.
Một đĩa theo chuẩn ISO 9660 chứa ít nhất một primary descriptor mô tả ISO 9660 file system và một terminating descriptor ám chỉ cuối của chuỗi descriptor. Joliet và UDF là những ví dụ của các file systems thêm vào nhiều descriptors tới chuỗi này.
Primary volume descriptor hoạt động giống như là superblock trên UNIX file system, cung cấp các chi tiết trên các vùng trên đĩa theo chuẩn ISO 9660. Chứa bên trong primary volume descriptor là root directory record mô tả vị trí của root directory. Directory entries được lưu bên trong vùng này. Root directory được lưu trữ như một mở rộng, hoặc một chuỗi tuần tự các sectors, mà chứa mỗi directory entries xuất hiện trong root. Ngoài ra, bởi vì ISO 9660 hoạt động thông qua việc phân chia CD-ROM/DVD thành các khối logic (logical blocks), kích thước của các blocks này được tìm thấy trong primary volume descriptor.
Trường đầu tiên trong một volume descriptor là volume descriptor type, nó có thể có các giá trị sau:
- Number 0: volume descriptor là một boot record
- Number 1: volume descriptor là một primary volume descriptor
- Number 2: volume descriptor là một supplementary volume descriptor
- Number 3: voluem descriptor là một volume partition descriptor
- Number 255: volume descriptor là một volume descriptor set terminator
Trường thứ 2 được gọi là standard identifier và được set giá trị CD001 cho một CD-ROM theo chuẩn ISO 9660.
Một trường đáng chú ý khác đó là volume space size, trường naỳ chứa lượng dữ liệu trên CD-ROM
Các thuộc tính file rất đơn giản trong ISO 9660. Thuộc tính file quan trọng nhất xác định xem file đó là thư mục hay là file thông thường.
Có 2 cách để xác định vị trí một file trên một ISO 9660 file system
- một là interpret các directory names và tìm trong thư mục đó có file cần tìm hay không
- một cách khác đó là sử dụng các bảng đường dẫn đã được biên dịch trước (precomplied table of paths), ở đó tất cả các entries được liệt kê trong các nội dung của một file với các entries tương ứng.
Đăng ký:
Bài đăng (Atom)














