Thứ Bảy, 24 tháng 5, 2014

Vài dòng cho những ngày cuối cấp

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ứ 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
  • 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
Xét một hệ thống Microsoft Windows với một đĩa cứng. Volume đĩa cứng được phân vùng thành 3 volumes nhỏ hơn, và mỗi volume có một file system. Windows gán các tên C, D, và E cho mỗi volume. Chúng ta có thể nhìn thấy trong Hình 1.
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ỉ Sector
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.
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
Trong nhiều trường hợp, chúng ta sẽ muốn sử dụng block size là 512 byte bởi vì đó là kích thước của một sector. Mặc định block size cho dd cũng là 512 bytes, nhưng an toàn hơn thì bạn nên chỉ định rõ ràng. Chúng ta sẽ sử dụng skip flag để chỉ định sector bắt đầu nơi mà partition bắt đầu và count flag để chỉ định bao nhiêu sectors ở trong partition.

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.
 
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.