एक साधारण फ़ंक्शन लिखते समय, जो एक निर्देशिका में खपत ब्लॉकों की मात्रा की गणना करता है, मैंने डु के साथ यह देखने के लिए जाँच की कि मुझे एक ही उत्तर मिल रहा है।
एलएस और डू क्यों कहते हैं कि यह फ़ाइल 16 ब्लॉकों पर कब्जा करती है?
#!/bin/bash
targetfile=/scratch/blob
rm -rf /scratch > /dev/null 2>&1
mkdir -p /scratch > /dev/null 2>&1
bs=$(dumpe2fs -h /dev/mapper/testvm-root 2> /dev/null | grep "Block size:")
bs=${bs/Block size:/}
bs=${bs// /}
echo blocksize=$bs
# create a file slightly too big for three blocks
dd if=/dev/zero of=$targetfile count=1 bs=$((bs*3+1)) > /dev/null 2>&1
echo "du says $(du $targetfile) units"
echo "du says $(du -b $targetfile) bytes:"
echo "ls says $(ls -s $targetfile) blocks"
echo "python says:"
python <(cat <<ENDMARKER
import os
import math
x = os.stat("$targetfile")
blocks=math.ceil(float(x.st_size)/float(x.st_blksize))
print("%d bytes st_blksize=%d, %d blocks " % (x.st_size,x.st_blksize,blocks))
print("blocksize=%d" % os.statvfs("$targetfile").f_bsize)
ENDMARKER
)
यह वही है जो मैं देख रहा हूं:
blocksize=4096
du says 16 /scratch/blob units
du says 12289 /scratch/blob bytes:
ls says 16 /scratch/blob blocks
python says:
12289 bytes st_blksize=4096, 4 blocks
blocksize=4096
मैं उम्मीद करूंगा कि ls -s को 4 ब्लॉक कहने चाहिए जैसे du -B 4096 करता है।