(圖片來源博客源尖尖毛草博客)
傳統的機配磁盤由盤片、機械臂、馬達構成。 一塊磁盤會有多個盤片。
(圖片來源:博客園尖尖毛草博客)
計算存儲容量=存儲容量=磁頭數×磁道(柱面)數×每道扇區數×每扇區字節數磁道扇區柱面三個參數計算存儲容量 = 存儲容量 = 磁頭數 × 磁道(柱面)數 × 每道扇區數 × 每扇區字節數磁道 扇區 柱面 三個參數計算存儲容量=存儲容量=磁頭數×磁道(柱面)數×每道扇區數×每扇區字節數磁道扇區柱面三個參數
老式磁盤中,每個磁道的扇區數是相等的,所以越往圓心存儲密度越高。現代磁盤改為等密度結構,外圍磁道的扇區數量大于内圈磁道,尋址方式也改為以扇區為單位的線性尋址。 為了與老式3D尋址兼容,現代磁盤控制器使用地址翻譯器把3D尋址參數轉為線性參數。
二、在深度系統中打開分區編輯器查看磁盤信息:
三、分區表
早期的分區以柱面為最小分區單位;現在的分區通常使用扇區為最小分區單位。每個扇區有一個自己的号碼。磁盤分區表主要有MBR和GPT兩種格式,GPT格式可以支持2T以上容量。
早期的Linux為了兼容Windows的磁盤,使用了支持Windows的MBR。MBR全稱是Master Boot Record,通常放在磁盤的第一個扇區。這個扇區通常為512字節大小,當中包括兩種東西:
sudo dd if=/dev/sda of=~/bootsector bs=512 count=1
使用vim -b ~/bootsector打開查看 (在vim命令模式下輸入:%!xxd 顯示16進制模式)
末尾的55aa是标志位,圖中選中的 8020開始即第一個分區信息,
如果要改動文件,可以使用
sudo dd if=~/bootsector of=/dev/sda bs=512 count=1
寫回磁盤。
使用C從扇區讀取文件
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <libgen.h>
#include <unistd.h>
static void usage(char *prog_name)
{
fprintf(stderr, "usage: %s device start count\n", prog_name);
fprintf(stderr, "example: %s /dev/sda 0 512\n", prog_name);
}
int main(int argc, char *argv[])
{
char buf[4096];
int fd = 0;
int i = 0;
int j = 0;
int start = 0;
int count = 0;
char *device = NULL;
if(argc != 4){
usage(basename(argv[0]));
exit(1);
}
device = argv[1];
start = atol(argv[2]);
count = atol(argv[3]);
// 把磁盤像文件一樣打開
fd = open(device, O_RDONLY);
if(-1 == fd){
fprintf(stderr, "cannot open device");
exit(1);
}
// 找到起始位置
if(lseek(fd, start, SEEK_SET) != start){
fprintf(stderr, "cannot seek at %d", start);
exit(1);
}
// 挨個字節讀出來
while(count > 0){
int size = count > sizeof(buf) ? sizeof(buf) : count;
read(fd, buf, size);
/* 每行顯示16個字節 每兩個字節間以空格分開 */
for(i = 0; i < size/16; i ){
fprintf(stdout,"x:", i*16 start);
for(j = 0; j < 16; j ){
fprintf(stdout, " x", (int)buf[i*16 j] & 0xFF);
}
fprintf(stdout,"\n");
fflush(stdout);
}
count -= size;
start = size;
}
}
gcc編譯運行:
擴展分區
分區記錄裡分一個擴展分區出來,然後在擴展分區前幾個扇區用來再記錄邏輯分區。Linux的SATA硬盤邏輯分區可以突破63個。
2. GPT分區(GUID Partition Table)由于 MBR分區 每個分區表隻有16字節,一個分區被限制最大隻能使用2.2TB的磁盤。GPT将扇區以邏輯區塊(Logincal Block Address,LBA)來處理,一個LBA默認512字節,第一個LBA就是LBA0.
Linux較早的文件系統使用的是ext2。centos6: 以ext4為主 。centos7: 以xfs為主,大文件系統,日志型 ,文件可以修複。執行命令: cat /etc/fstab
六、索引節點inode每個存儲設備或存儲設備的分區被格式化為文件系統後有兩部分:block inode文件存儲在硬盤上,最小存儲單位是扇區,每個扇區可能是512Byte。但操作系統讀取硬盤時,不會一個一個扇區讀,而是一次性連續讀多個扇區,多個扇區稱為一個“塊”。多個扇區組成的塊,是文件存取的最小單位。“塊”的大小,常見的有4B,即連續8個扇區。塊用來存儲數據,而inode用來存儲這些數據元信息,主要包括:
使用stat命令可以查看文件的inode信息:
$ stat linux2-4.mov
16777220 3753644 -rw-r--r-- 1 apple staff 0 674287083 "Jul 9 23:49:23 2020" "Jul 9 23:07:22 2020" "Jul 9 23:07:23 2020" "Jul 9 23:07:08 2020" 4096 1344096 0 linux2-4.mov
硬盤在格式化的時候,操作系統會将硬盤分成兩個區域:數據區、inode區。每個inode節點的大小一般為128B或256B;inode節點的數量在格式化時給定,一般是每1K或每2K設置一個inode。
如果一塊1G的硬盤,每個inode節點大小為128B,每1K就設置一個inode,那inode占的空間會達到128M,占硬盤的12.8%。
df -i 命令可以查看每個硬盤分區的inode總數和已經使用的數量。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!