環境:centos 7.6 1810
情況:我掛了一塊10GB的磁盤/dev/vdb到linux上,單個扇區大小512,里面分了一個區/dev/vdb1。 vdb1的起始扇區號為2048,ext4。
然后我通過 dd 往/dev/vdb1 seek=2048 bs=1b count=1的位置寫入512個字符a。
接下來 我通過dd 從 /dev/vdb skip=4096 bs=1b count=1的位置讀資料,卻讀出來的不是字符a。 為啥???
uj5u.com熱心網友回復:
你用反了吧。我記得寫入硬碟是skip 讀出是seekuj5u.com熱心網友回復:
seek是對目標生效 skip是對源生效uj5u.com熱心網友回復:
命令流程:# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.7G 0 3.7G 0% /dev
tmpfs 3.7G 0 3.7G 0% /dev/shm
tmpfs 3.7G 21M 3.7G 1% /run
tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup
/dev/vda2 39G 3.3G 34G 10% /
/dev/vda1 1022M 7.7M 1015M 1% /boot/efi
tmpfs 758M 0 758M 0% /run/user/0
/dev/vdb1 9.8G 37M 9.2G 1% /data //vdb1 掛載了
# (head -c 512 /dev/urandom | base64) > ./af
# dd if=./af bs=16 count=1 | od -t x1
1+0 records in
1+0 records out
16 bytes (16 B) copied0000000 66 49 36 66 48 46 4c 2b 45 46 4b 33 42 2f 37 4e
0000020
, 3.7831e-05 s, 423 kB/s
# dd if=./af of=/dev/vdb1 bs=512 count=1 seek=2048
# dd if=/dev/vdb1 bs=16 | od -t x1 | grep "66 49 36 66 48 46 4c 2b 45 46 4b 33 42 2f 37 4e"
4000000 66 49 36 66 48 46 4c 2b 45 46 4b 33 42 2f 37 4e
1274685+0 records in
1274685+0 records out
20394960 bytes (20 MB) copied, 1.7184 s, 11.9 MB/s //這里在vdb1里面找到了上面dd寫入的 偏移位置也對
# dd if=/dev/vdb bs=512 | od -t x1 | grep "66 49 36 66 48 46 4c 2b 45 46 4b 33 42 2f 37 4e"
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 57.087 s, 188 MB/s //這里在vdb卻沒找到。
uj5u.com熱心網友回復:
我測驗了一下發現是沒有實際寫進去,你看到的都是內核快取。你寫入之后將磁區卸載一下在查看就可以了
[root@ll tmp]# df -h
檔案系統 容量 已用 可用 已用% 掛載點
dev 7.8G 0 7.8G 0% /dev
run 7.8G 1.2M 7.8G 1% /run
/dev/sda2 328G 55G 257G 18% /
tmpfs 7.8G 250M 7.6G 4% /dev/shm
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
tmpfs 7.8G 116M 7.7G 2% /tmp
/dev/sda3 129G 24G 99G 20% /home
/dev/sda1 509M 57M 427M 12% /boot
tmpfs 1.6G 52K 1.6G 1% /run/user/1000
/dev/sdb1 945M 69M 811M 8% /mnt
[root@ll tmp]# (head -c 512 /dev/urandom | base64) > ./rand
[root@ll tmp]# dd if=./rand bs=16 count=1 | od -t x1
記錄了1+0 的讀入
記錄了1+0 的寫出
16 bytes copied, 0.000140631 s, 114 kB/s0000000 43 43 55 6a 38 45 59 42 30 5a 7a 54 36 6b 46 69
0000020
[root@ll tmp]# dd if=rand of=/dev/sdb1 bs=512 count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
512 bytes copied, 0.00262536 s, 195 kB/s
[root@ll tmp]# dd if=rand of=/dev/sdb1 bs=512 count=1 ^C
[root@ll tmp]# dd if=/dev/sdb1 bs=16 | od -t x1 | grep "43 43 55 6a"
0000000 43 43 55 6a 38 45 59 42 30 5a 7a 54 36 6b 46 69
^C記錄了720095+0 的讀入
記錄了720094+0 的寫出
11521504 bytes (12 MB, 11 MiB) copied, 1.35463 s, 8.5 MB/s
[root@ll tmp]# sync
[root@ll tmp]# umount /dev/sdb1
[root@ll tmp]# dd if=/dev/sdb bs=16 | od -t x1 | grep "43 43 55 6a"
4000000 43 43 55 6a 38 45 59 42 30 5a 7a 54 36 6b 46 69
^C記錄了556692+0 的讀入
記錄了556691+0 的寫出
8907056 bytes (8.9 MB, 8.5 MiB) copied, 1.03778 s, 8.6 MB/s
uj5u.com熱心網友回復:
兄弟這分可是良心分,我沒吃午飯來驗證這個問題轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/67941.html
標籤:驅動程序開發區
上一篇:關于dd 整個磁盤 和磁區的疑問
