আমি কীভাবে কোনও ব্লক ডিভাইসের আকার জানতে পারি /dev/sda? দৌড়ানো ls -lকোনও কার্যকর তথ্য দেয় না gives
আমি কীভাবে কোনও ব্লক ডিভাইসের আকার জানতে পারি /dev/sda? দৌড়ানো ls -lকোনও কার্যকর তথ্য দেয় না gives
উত্তর:
fdiskআমার ম্যাক চালিত লিনাক্স দ্বারা ব্যবহৃত পার্টিশন লেআউট, বা অন্য কোনও পিসি নন-পিসি পার্টিশন ফর্ম্যাট বুঝতে পারে না। (হ্যাঁ, mac-fdiskপুরানো ম্যাক পার্টিশন টেবিলগুলির gdiskজন্য এবং নতুন জিপিটি পার্টিশন টেবিলের জন্য রয়েছে, তবে সেগুলি কেবলমাত্র অন্যান্য পার্টিশন বিন্যাস নয়))
যেহেতু ব্লক ডিভাইসটি পরিষেবাতে আসার পরে কার্নেলটি পার্টিশন বিন্যাসগুলি ইতিমধ্যে স্ক্যান করেছে, কেন সরাসরি এটি জিজ্ঞাসা করবেন না?
$ বিড়াল / প্রকল্প / পার্টিশন বড় নাবালিকা # ব্লক নাম 8 16 390711384 এসডিবি 8 17 514079 এসডিবি 1 8 18 390194752 এসডিবি 2 8 32 976762584 এসডিসি 8 33 514079 এসডিসি 1 8 34 976245952 এসডিসি 2 8 0 156290904 এসডিএ 8 1 514079 sda1 8 2 155774272 এসডিএ 2 8 48 1465138584 এসডিডি 8 49 514079 এসডিডি 1 8 50 1464621952 এসডিডি 2
awk '/sd[a-z]$/{printf "%s %8.2f GiB\n", $NF, $(NF-1) / 1024 / 1024}' /proc/partitions
blockdev --getsize64 /dev/sda বাইট আকারে ফেরত।
blockdev --getsz /dev/sda 512-বাইট খাতগুলিতে আকার ফেরত দেয়।
অবচয়: blockdev --getsize /dev/sdaসেক্টরগুলিতে আয়তন আকার।
ব্লকদেব ইউজ -লিনাক্সের অংশ।
--getsize করা হয়েছে এবং --getszধারাবাহিকভাবে 512-বাইট সেক্টরের পরামর্শ দেয় । যদি --getsizeঅবশ্যই ব্যবহার করা হয় তবে আমার ধারণা অনুমান --getssকরা হয় যে খাতটির আকারটি আপনি যা প্রত্যাশা করছেন তা নিশ্চিত করার জন্যও এটি ব্যবহার করা উচিত।
cat /sys/class/block/sda/size
এটি আপনাকে 512-বাইট ব্লকে এর আকার দেয়।
এই সহজ কোড। কোনও ডকুমেন্টেশন খুঁজে পাওয়া যায়নি , তবে কৌশলটি দুর্দান্তভাবে করেছেন:
#include <linux/fs.h>
...
ioctl(file, BLKGETSIZE64, &file_size_in_bytes);
BLKGETSIZE64বাইট আকারে ফিরিয়ে দেয়। দেখুন linux/fs.h, কোনটি "বাইটে ডিভাইসের আকার ফেরত দেয়" নোট করে। দ্রষ্টব্য যে BLKGETSIZE(কোনও "64" নয়) এটি "/ 512" প্রদান করে।
fileকরতে একটি ফাইল বর্ণনাকারী হওয়া প্রয়োজন (উদাহরণস্বরূপ open()), এবং file_size_in_bytesএকটি হওয়া উচিত size_t।
file_size_in_bytes64-বিট টাইপ হওয়া উচিত, তাই এটি হওয়া উচিত unsigned long long।)
কেমন:
fdisk -l
এটি আপনাকে আপনার সমস্ত ডিস্কের তাদের নিজ নিজ ক্ষমতা, ব্যবহার এবং আরও অনেকগুলি তালিকা সরবরাহ করবে।
lsblk গাছের দর্শন সহ এবং একটি মানব পাঠযোগ্য বিন্যাসে ডিভাইসের ধরণ এবং মাউন্টপয়েন্টগুলি (যদি থাকে) সহ আপনি সন্ধান করছেন এমন তথ্য দেয়।
ডিভাইসের ধরণের অর্থ হ'ল এটি সিডি ড্রাইভের জন্য কাজ করে, যেমন গণেশ সিতাম্পালাম বলেছিলেন।
একটি নির্দিষ্ট ডিভাইসের আকার কেবল বাইটে পেতে:
lsblk -rbno SIZE /dev/block-device
echo "`cat /sys/class/block/sda2/size`*512" | bc
অথবা আপনি যদি বাশ বা অন্য কোনও পসিক্স-এর মতো শেল ব্যবহার করেন যার পাটিগণিত অপারেটরগুলি bit৪ বিটের পূর্ণসংখ্যার সাথে কাজ করে, আপনার কল করার দরকার নেই bc
echo "$((512*$(cat /sys/class/block/sda2/size)))"
বাইট আকার দেয়।
থেকে কল catএবং কাঁটাচামচ (ছাড়া bash) সঙ্গে দূরে অপ্টিমাইজ করা যেতে পারে bash, ksh93এবং zshসাথে
echo "$((512*$(</sys/class/block/sda2/size)))"
সি-তে ioctl এর দরকার নেই কেবল ফাইলটির শেষের দিকে তাকান এবং সেই আকারটি (বাইটে) পান:
/* define this before any #includes when dealing with large files: */
#define _FILE_OFFSET_BITS 64
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
// ...
int fd = open("/dev/sda", O_RDONLY);
off_t size = lseek(fd, 0, SEEK_END);
// Now size is the size of the file, in bytes, or -1 on error.
// lseek(fd, 0, SEEK_SET) to get back to the start of the file.
ব্লকদেব (8) এর আলাদা উত্তর আছে? বিকল্পগুলি --getszএবং অবহেলা --getsizeএক নয়।
blockdev --getss) শারীরিক ক্ষেত্রের আকার এবং এর জন্যblockdev --getbsz) লজিকাল সেক্টরের আকারের জন্য।echo $(($(blockdev --getsize64 /dev/sda)/$(blockdev --getss /dev/sda)))
block/ioctl.cলিনাক্সের কার্নেল উত্সটিতে বিভ্রান্তিকর মন্তব্য রয়েছে। বিএলকেপিবিএসজেজিজেট (পি পি লক্ষ্য করুন) দৈহিক সেক্টরের আকার পায়, বিএলকেএসজেডজিট যৌক্তিক খাতের আকার এবং বিএলকেবিএসজিজেট (বা বিএলকে বিএসবিজেজিজেই 3232 block/compat_ioctl.c) ফাইল সিস্টেম বরাদ্দ ইউনিট (ক্লাস্টার) আকার পায়। অ্যাডভান্সড ফর্ম্যাট 512e ব্যবহার করা হলে লজিকাল এবং ফিজিক্যাল সেক্টরের আকার পৃথক হয়। ( 512e @ ডাব্লু )
প্রথম, যারা অবদান রেখেছেন তাদের সবাইকে আমার ধন্যবাদ। আমি কয়েকটি দরকারী জিনিস শিখেছি।
তবুও, আমার অভিজ্ঞতা হ'ল এই উত্তরগুলির বেশিরভাগই কিছুটা অসম্পূর্ণ, কমপক্ষে যেখানে সিডি এবং ডিভিডিই উদ্বিগ্ন, বিশেষত এটি সুপারভাইজারের মধ্যে সীমাবদ্ধ না রেখে সাধারণ ব্যবহারকারীদের জন্য উপলব্ধ কিনা তা নিয়ে।
এটি আমার লিনাক্স মাগিয়া 2-এর পরীক্ষার উপর ভিত্তি করে।
সুপারইউসারটির উদ্দেশ্যে চিহ্নিত কমান্ডগুলি সর্বদা সাধারণ ব্যবহারকারীর দ্বারা পূর্বনির্ধারিত /sbin/বা কখনও কখনও / usr / sbin / দ্বারা ব্যবহার করা যেতে পারে । এখন তারা সাধারণ ব্যবহারকারীর জন্য কাজ করতে পারে বা নাও করতে পারে।
অনেকে একটি সাধারণ ব্যবহারকারীর জন্য, ডিভিডি ড্রাইভের ডিভিডির জন্য, এটি মাউন্ট না করা অবস্থায়ও কাজ করতে পারেন, যখন তারা হার্ড ডিস্কের জন্য কাজ করবেন না (যখন আবার সাধারণ ব্যবহারকারী হিসাবে ডাকে)।
উদাহরণস্বরূপ /sbin/fdisk -l /dev/cdromআমার সিস্টেমে কাজ করবে এবং ড্রাইভের ডিভিডির "জ্যামিতি" দেবে ... যা সম্ভবত বেশিরভাগ বোকামি। তবে এটি বাইটস এবং সেক্টরগুলিতে ডিভিডি আকার এবং সঠিক সেক্টরের আকার দেয় (ডিভিডির জন্য যথারীতি 2048 বাইট)।
একই সত্য /usr/sbin/gdisk -l /dev/cdrom, যা 2048 বাইটের সেক্টরে কেবল আকার দেয়।
অন্যান্য উদাহরণ (নন-রুট, সাধারণ ব্যবহারকারী হিসাবে)
$ /sbin/blockdev --getss /dev/cdrom # DVD sector size
2048
$ /sbin/blockdev --getsize64 /dev/cdrom # DVD byte size
5453316096
$ cat /proc/partitions # see below
...
8 8 416027241 sda8
11 0 5325504 sr0
8 16 1465138584 sdb
...
এই ডিভিডিটি ড্রাইভ, এখানে বলা জন্য কাজ করে sr0, যেহেতু এটি জন্য ডিভাইস আসলে /dev/sr0, /dev/cdromশুধুমাত্র এটি একটি সিম্বলিক লিঙ্ক হচ্ছে। আকার 1k এর অংশে দেওয়া হয়
একইভাবে, সাধারণ ব্যবহারকারী হিসাবে, কমান্ড
$ cat /sys/class/block/sr0/size
10651008
/dev/sr0512 বাইট (পাশাপাশি অন্যান্য ডিস্কের আকার এমনকি মাউন্ট করা হয়নি) হিসাবে ডিভাইসে একটি ডিভিডি আকার দেবে । তবে cat /sys/class/block/cdrom/sizeকাজ করবে না কারণ / দেব / সিড্রাম কেবল একটি প্রতীকী লিঙ্ক
dfকিছু দ্বারা প্রস্তাবিত কমান্ডটি পুরো ডিস্কের পরিবর্তে মাউন্ট করা পার্টিশনের আকার দেয়। তদুপরি, একটি মাউন্ট করা সিডি বা ডিভিডি জন্য এটি সিডি / ডিভিডি এর প্রকৃত আকারের চেয়ে কম দেয়। আরও স্পষ্টভাবে, দুটি স্বতন্ত্র আকারের মধ্যে আগ্রহী হতে পারে:
dd;df।একটি ব্লক একটি নির্দিষ্ট দৈর্ঘ্য সহ বিট বা বাইটের ক্রম যা 512 বাইট, 4 কেবি, 8 কেবি, 16 কেবি, 32 কেবি ইত্যাদি with
blockdev --getbsz partition
উদাহরণ
# blockdev --getbsz /dev/sda1
4096
সুতরাং এই ফাইল সিস্টেমের ব্লকের আকার 4kB।
আপনি যদি নোড.জেএস ব্যবহার করে থাকেন তবে ব্লক ডিভাইস আকার, শারীরিক সেক্টর আকার এবং লজিক্যাল সেক্টরের আকার (ফ্রিবিএসডি, লিনাক্স, ম্যাকোস এবং উইন্ডোজ সমর্থন সহ) পেতে আপনি এই নেটিভ অ্যাড ব্যবহার করতে পারেন। সরাসরি আইও করার জন্য এটির আরও কয়েকজন সহায়ক রয়েছে:
Is /sys/block/sda/sizeব্লক আকার? যদি তাই হয়?
Ioctl BLKGETSIZE যেমন 512 বদলে একক হয় একই সমস্যা হয়েছে BLKSSZGET । BLKGETSIZE64 এই অস্পষ্টতাকে সমাধান করে। বাস্তব ব্লক গণনা হয় BLKGETSIZE64 / BLKSSZGET ।
/*BINFMTC:
http://lkml.indiana.edu/hypermail/linux/kernel/0105.2/0744.html
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <assert.h>
int main(int argc, char **argv)
{
int fd;
long blk=0L;
long ssz=0L;
long long oct=0LL;
if((fd=open(argv[1],O_RDONLY))<0) { perror(argv[1]); exit(1); }
if(ioctl(fd,BLKGETSIZE,&blk)<0) { perror("BLKGETSIZE"); exit(1); }
if(ioctl(fd,BLKSSZGET,&ssz)<0) { perror("BLKSSZGET"); exit(1); }
if(ioctl(fd,BLKGETSIZE64,&oct)<0) { perror("BLKGETSIZE64"); exit(1); }
if(close(fd)<0) { perror("close"); exit(1); }
printf("BLKGETSIZE=%ld BLKSSZGET=%ld BLKGETSIZE64=%lld BLKGETSIZE64/BLKSSZGET=%ld SIZEGB=%f #%f\240GiB\n\n",\
blk,ssz,oct,(long)(oct/(long long)ssz),(double)oct/1000000000.0,(double)oct/1073741824.0);
fflush(stdout); /* before exec */
execl("/bin/bash","bash","-c",\
"for i in \
/sys/block/?d?/{size,alignment_offset,?d??/size,?d??/alignment_offset,queue/*block*,queue/*sector*}; \
do test -f \"$i\" && echo \"$i: $(<$i)\"; done"\
,NULL);
exit(127);
return 127; /* not reached */
}
Http://lkml.indiana.edu/hypermail/linux/kernel/0105.2/0744.html দেখুন
এখানে একটি EMC ইউটিলিটি রয়েছে inqযা স্থানীয় সংযুক্ত, SAN ভিত্তিক, ইত্যাদি সম্পর্কিত সমস্ত ধরণের ব্লক ডিভাইস সম্পর্কিত তথ্য দেয়
চেষ্টা কর.
ftp://ftp.emc.com/pub/symm3000/inquiry/
এটি কী করে তার একটি সংক্ষিপ্ত বিবরণ এখানে দেওয়া হয়েছে: http://slashzeroconf.wordpress.com/2009/02/09/emc-inq-utility/
echo "`blockdev --getbsz /dev/sdc`/1024"|bc
কেবিতে আউটপুট প্রদর্শন করবে
[root@veritas datadg2]# echo "`blockdev --getbsz /dev/sdc`/1024"|bc
4
[root@veritas datadg2]#
echo $(( $(blockdev ...)/1024 ))। এছাড়াও নোট করুন, --getbszডিভাইসের আকার নয়, ব্লকের আকার দেয়।
আরও সহজভাবে:
sudo parted -l /dev/sda
আমার পক্ষে সবচেয়ে সহজ এবং টাইপ করা সহজ
df -k | grep /dev/sda
আপনাকে কেবিতে (প্রথম নম্বর) আকারের পাশাপাশি ব্যবহৃত স্থান (দ্বিতীয় সংখ্যা) এবং উপলভ্য স্থান (তৃতীয় সংখ্যা) দেবে