dd
فهرست
مقدمه
با ابزار dd میتوان داده های یک بلاک دیوایس را در سطح صفر و یک به روی یک بلاک دیوایس دیگر یا یک فایل کپی کرد.
این بلاک دیوایس ها میتوانند یک دیوایس واقعی مثل سیدی یا فلش درایو یا حتی هارد شما باشند
مانند
dev/sda/
یا یکی از پارتیشن ها مثل
dev/sda1/
باشد.
و یا میتوانند بلاک دیوایس های مجازی باشند. مثل
dev/zero/
یا
dev/random/
حتی شما میتوانید داده ها را از یک فایل عادی بخوانید.
سوییچ ها نیازی به – و یا - ندارند
برای مشخص کردن مقدار ارگومان ها باید بعد از سوییچ از علامت = استفاده کرد
ورودی
همینطور که میدانید ورودی dd میتواند هر نوع فایلی باشد
برای اینکه وردی را مشخص کنیم باید از سوییچ
=if
که مختصر شده
input file
هست استفاده کنیم.
$ dd if=/dev/zero
خروجی
برای اینکه داده ها را بعد از خواندن از ورودی به یک خروجی بریزیم
کافیه که مسیر خروجی را برای سوییچ
=of
که مخفف کلمه
output file
هست
مشخص کنیم.
خروجی میتواند یک فایل یا یک بلاک دیوایس باشد
$ dd if=/dev/zero of=./zer0s.dd
اگر مقدار خواندن از ورودی را محدود نکید، به محتوای این فایل تا زمانی که دیسک شما پر شود اضافه خواهد شد
سرعت خواندن از ورودی
سرعت خواندن فایل از وردی در حالت عادی به 512 بایت در ثانیه محدود شده است. دلیل آن این است که هر سکتور دیسک 512 بایت است، و ابزار dd به دلیل اینکه هر نوع دادهای را بلاک دیوایس محسوب میکند، سرعت خواندن و نوشتن را به صورت پیشفرض 512 بایت نگه میدارد. شما میتوانید این مقدار را با توجه به سرعت دیسک، رم و … سیستم خودتان به مقدار دلخواه تنظیم کنید.
سوییچ
=bs
از شما عدد و یکی از این واحد های
b
, k
, m
, g
, t
, p
, e
را میگیرد.
$ dd if=/dev/randon of=./rnd bs=10M
دقت کنید که سرعت ورودی را محدود کردیم اما مقدار را نه، اگر مقدار را خصوصا برای بلاک دیوایس های مجازی مثل
dev/zero/
مشخص نکیم دیتا تا جایی که دیسک شما فضا خالی داشته باشد به فایل اضافه خواهد شد.
تعداد
ما میتوانیم ضمن محدودیت برای سرعت خواندن فایل، تعداد دفعات خواندن را هم مشخص کنیم.
برای مثال با اینکار میتوانیم مشخص کنیم که دقیقا چند بایت دیتا از
بلاک دیوایس
dev/zero/
بخوان و به خروجی بریز.
برای اینکار عدد تعداد دفعات را به سوییچ
=count
میدهیم.
در این مثال ما به تعداد 800 بار و با سرعت
10M
بر ثانیه دیتا را میخوانیم
که در نهایت یک فایل با سایز
8G
ساخته میشود.
800 * 10M = 8000M
$ dd if=/dev/zero of=8g.data bs=10M count=800
وضعیت
درحالت عادی
dd
هیچ خروجی از پیشرفت و سرعت انجام کار نمیدهد. برای اینکه این خروجی را بتوان در لحظه دید
باید از سوییچ
=status
استفاده کنید، این سوییچ 3 اپشن میگیرید که به نسبت هر اپشن یک نوع وضعیت را
نشان میدهد.
- none
هیچ خرجی به جز ارور نمایش نمیدهد.
- noxfer
درحالت پیش فرض زمانی که کار dd تمام شد یک خروجی نمایش میدهد. اما با این سوییچ خروجی پایان کار را هم نخواهیم دید.
- progress
در هر لحظه هر تغییری را به خروجی نمایش میدهد.
$ dd if=/dev/zero of=./somefile bs=10M count=100 status=progress
# 901775360 bytes (902 MB, 860 MiB) copied, 3 s, 298 MB/s
ایمج گرفتن از یک دیسک
- مثال اول
برای اینکه از یک دیست مثلا یک فلش درایو ایمج بگیریم کافیه مسیر اون بلاک دیوایس را مشخص کنیم. میتوانیم از یک پارتیشن هم ایمج بگیریم.
سعی کنید در نام فایل خروجی dd را قرار دهید. با اینکار شما و یا دیگران میدانند چطور از فایل استفاده کنند.
$ dd if=/dev/zero of=/media/backups/bkp.dd
وایپ کردن یک دیسک
- مثال دوم
وایپ (wipe) کردن به معنی این است که داده های یک دیسک را کاملا محو کنیم بطوری که دیسک دیگر قابل ریکاوری(بازیابی) نباشد. همینطور که میدانید فایل ها چیزی جز 0 و 1 نیستند، این 0 و 1 ها به عنوان فایل روی دیسک ذخیره میشوند. اگر شما بخواهید فایل ها دیگر قابل ریکاوری نباشند باید تمامی دیسک را با 0 پر کنید.
برای اینکار ما از بلاک دیوایس dev/zero/ که فقط 0 تولید میکند استفاده میکنیم و خروجی را مستقیم روی بلاک دیوایس فلش درایو قرار میدهیم.
دقت کنید که نباید برای وایپ کردن محدودیت تعداد قرار دهید. اگر محدودیت قرار بدین ممکن است تمامی دیسک وایپ نشود.
$ dd if=/dev/zero of=/dev/sdc
ساخت فایل swap
- مثال سوم
لینوکس میتواند از فایل به عنوان swap استفاده کند. برای اینکار چهار مرحله پیشرو داریم
- یک فایل خالی میسازیم
- هدر فایل را به هدر swap تغییر میدهیم
- از فایل استفاده میکنیم
- برای اینکه بعد از بوت، سیستم عامل خودکار از فایل
swap
استفاده کند کافیست مسیر فایل را در
etc/fstab/
قرار دهیم
دقت کنید که سایز فایل swap باید به نسبت رم تنظیم شود.
مقدار رم سیستم | swap پیشنهادی |
---|---|
≤ 2GB | 2X RAM |
2GB – 8GB | = RAM |
> 8GB | 8GB |
# create the swapfile with 8G size
$ sudo dd if=/dev/zero of=/swapfile bs=10M count=800
# add swap header to swapfile
$ sudo mkswap /swapfile
# use swapfile for just now
$ swapon /swapfile
# add swapfile to fstab to ensure use the swapfile after each reboot
$ sudo echo '/swapfile none swap sw 0 0' >> /etc/fstab