شما برای مطالعه این مقاله فقط 7 دقیقه وقت نیاز دارید

dd-command-in-linux
دسته بندی : آموزش لینوکس

راهنمای کامل استفاده از دستور dd در لینوکس

5/5 - (1 امتیاز)

دستور dd در لینوکس مخفف data duplicator است و به عنوان یک ابزار قدرتمند برای تبدیل و کپی فایل ها استفاده می شود که به مراتب سینتکس متفاوتی نسبت به سایر دستورات لینوکسی دارد.

از مهم ترین کاربردهای دستور dd می توان به ایجاد نسخه پشتیبان از دیسک‌ ها و پارتیشن‌ ها، پاکسازی اطلاعات دیسک ها، ایجاد درایور USB قابل بوت و تبدیل و دستکاری داده ها اشاره کرد. 

پیش نیازهای استفاده از دستور dd در لینوکس

  • سیستم یا سرور مبتنی بر لینوکس
  • دسترسی به ترمینال
  • دسترسی به یک حساب کاربری با امتیازات sudo
  • فضای ذخیره سازی کافی
  • نصب بودن دستور dd در لینوکس

دستور dd به طور پیش فرض در اکثر توزیع های لینوکس نصب است ولی اگر بعد از اجرای دستور dd –version متوجه شدید که این دستور در سیستم شما نصب نیست، ابتدا باید دستور نصب پکیج coreutils در لینوکس را اجرا کنید:

دستور نصب dd در توزیع های مبتنی بر دبیان مثل اوبونتو

sudo apt install coreutils

دستور نصب dd در توزیع های مبتنی بر ردهت مثل CentOS و فدورا

sudo yum install coreutils

یا

sudo dnf install coreutils

دستور نصب dd در آرچ لینوکس 

sudo pacman -S coreutils

دستور نصب dd در OpenSUSE

sudo zypper install coreutils

بعد از اینکه دستور نصب با موفقیت اجرا شد، با استفاده از دستور زیر می توانید از نصب موفقیت آمیز آن مطمئن شوید:

dd --version

 اگر نیاز به انعطاف بیشتری در مدیریت و حفاظت از اطلاعات سیستم خود دارید، می توانید به صفحه خرید سرور مجازی لینوکس مراجعه کنید و با تهیه یک سرور مناسب، از قدرت دستور dd نهایت استفاده را ببرید.

سینتکس دستور dd در لینوکس

سینتکس پایه دستور dd به صورت زیر است:

dd if=input_file of=output_file bs=block_size count=number_of_blocks

شاید این سینتکس در مقایسه با سینتکس سایر دستورات کمی متفاوت باشد ولی بعداً که با آپشن ها و کاربرد آنها آشنا خواهید شد، می بینید که استفاده از آن چقدر راحت است.

آپشن های دستور dd

آپشن کاربرد
ifتعیین فایل ورودی یا مبدا
ofتعیین فایل خروجی یا مقصد
bsتعیین سایز بلاک برای انتقال داده
countتعیین تعداد بلاک موردنظر برای کپی
skipرد کردن تعدادی از کاراکترها یا بایت ها موقع خواندن فایل ورودی
seekرد کردن تعدادی از بلاک ها یا بایت ها موقع نوشتن در فایل خروجی
statusنمایش وضعیت اجرای دستور dd
convتعیین گزینه های تبدیل ورودی یا خروجی

برای آشنایی بیشتر با آپشن های دستور dd می توانید از دو دستور زیر کمک بگیرید:

man dd

dd -h

مثال های کاربردی از دستور dd لینوکس

مثال های زیر به صورت ساده تا پیشرفته مرتب شده اند و با بررسی آنها می توانید به طور کامل با طرز کار این دستور dd آشنا شوید:

کپی محتویات یک فایل در فایل دیگر

برای اینکه محتویات فایل مبدا را در یک فایل دیگر کپی کنید، کافیست از آپشن های if و of استفاده کنید. 

فرض کنید اسم فایل مبدا source.txt و اسم فایل مقصد destination.txt است و می خواهید محتویات فایل اول را در فایل دوم کپی کنید:

sudo dd if=source.txt of=destination.txt

این دستور محتویات source.txt را می خواند و آن ها را در فایل جدیدی به اسم destination.txt می نویسد.

اگر فایل مقصدی که می خواهید محتویات فایل مبدا را در آن کپی کنید، از قبل وجود داشته باشد، با اجرای دستور بالا فایل موجود بازنویسی می شود و اندازه فایل مقصد به اندازه فایل مبدا محدود می شود.

برای جلوگیری از این قضیه می توانید از آپشن conv=notrunc استفاده کنید.

sudo dd if=source.txt of=destination.txt conv=notrunc

با وارد کردن این آپشن، در واقع از dd می خواهید که به جای بازنویسی کل فایل موجود، محتویات قبلی destination.txt را حفظ کند و فقط بخش های جدید را از source.txt به destination.txt اضافه کند.

اگر هم می خواهید داده های موردنظر را به انتهای فایل موجود اضافه کنید، باید از append استفاده کنید:

sudo dd if=users.txt of=newusers.txt conv=append

یا اگر می خواهید کلاً از بازنویسی جلوگیری کنید، یعنی اگر فایل مقصد از قبل موجود بود، عملیات کپی کلاً شروع نشود، می توانید از گزینه excl استفاده کنید:

sudo dd if=source.txt of=destination.txt conv=excl

البته آپشن conv، امکان Uppercase یا Lower کردن محتویات فایل را هم به شما می دهد.

به عنوان مثال اگر محتویات file1 به صورت lower case (حروف کوچک) است و می خواهید در حین این عملیات کپی در file2، حروف آن را هم به upper case تغییر دهید، باید دستور زیر را اجرا کنید:

sudo dd if=file1.txt of=file2.txt conv=ucase

برعکس این قضیه هم با دستور زیر عملی است:

sudo dd if=file1.txt of=file2.txt conv=lcase

رد کردن بایت ها یا کاراکترهای موردنظر موقع خواندن فایل ورودی

شما می توانید با استفاده از آپشن های ibs و skip از چند کاراکتر اول رد شده و از کپی شدن آن را در فایل خروجی جلوگیری کنید.

به عنوان مثال فرض کنید یک فایل دارید که دارای متن زیر است:

this is a sample text file

حالا اگر بخواهید ۸ کاراکتر اول آن را در پروسه کپی فایل نادیده بگیرید، باید از دستور زیر استفاده کنید:

sudo dd if=file1.txt of=file2.txt ibs=8 skip=1

حالا اگر فایل خروجی را باز کنید، با چنین متنی روبرو خواهید شد:

a sample text file

ایجاد بکاپ از یک پارتیشن

برای پشتیبان گیری از یک پارتیشن دیسک، ابتدا باید دستگاه بلوک مرتبط با پارتیشن را شناسایی کنید که برای این کار می توانید از دستور زیر استفاده کنید:

df -h

استفاده از dh در دستور dd در لینوکسبعد از اینکه پارتیشن موردنظر خود را شناسایی کردید، کافیست مسیر پارتیشنی که می خواهید از آن بکاپ بگیری را به آپشن if و اسم فایل بکاپ با پسوند img را هم به آپشن of بدهید.

sudo dd if=/dev/hda1 of=~/partition_backup.img

این دستور محتویات موجود در dev/hda1/ را می خواند و آن را در فایل partition_backup.img ذخیره می کند.

کلیک کنید  ایجاد امنیت SSH از طریق Port Knocking در اوبونتو و دبیان

بکاپ گیری از کل هارددیسک

این دستور هم مشابه دستور بالا است. با این تفاوت که این بار باید مسیر اولین دیسک یعنی dev/sda/ را به دستور dd بدهید تا عملیات بکاپ گیری از سیستم شروع شود:

sudo dd if=/dev/sda of=~/hard_disk_backup.img

بازیابی سیستم با دستور dd 

اگر به خاطر ریکاوری سیستم خود می خواهید فایل بکاپی که قبلاً از هارددیسک ایجاد کرده اید را بازیابی کنید، باید جای مقدار if و of مربوط به دستور بکاپ را عوض کنید.

ابتدا تمام پارتیشن های دیسک dev/sdb/ را با دستور زیر حذف کنید:

lsblk /dev/sdb

سپس عملیات بازیابی را شروع کنید:

sudo dd if=~/hard_disk_backup.img of=/dev/sda

این دستور محتویات فایل بکاپ را می خواند و سپس مجدداً آن ها را در هارددیسک dev/sda/ می نویسد که همین کار برای بازیابی کل سیستم کافی است.

البته، اگر قصد بازیابی یک پارتیشن را دارید، باز هم می توانید از دستور بالا برای بازیابی آن استفاده کنید (منتها با فایل بکاپ پارتیشن و مسیر پارتیشن موردنظر ).

بکاپ گیری از MBR و بازیابی آن با دستور dd

 Master Boot Record (MBR) یکی از اجزای ضروری هارددیسک است و شامل بوت لودر و جدول پارتیشن بندی است.

اگر می خواهید محکم کاری کنید و یک نسخه بکاپ از MBR ایجاد کنید تا در صورت خرابی یا بازنویسی بخش بوت، از آن برای بازیابی وضعیت استفاده کنید، می توانید از دستور زیر استفاده کنید:

sudo dd if=/dev/sda of=mbr_backup.img bs=512 count=1

این دستور، دیسک dev/sda/ را برای خواندن MBR لازم است را به عنوان فایل ورودی می گیرد و بعد فایل خروجی را هم mbr_backup.img تعیین می کند. bs=512 سایز بلوک و count هم تعداد بلوکی که باید کپی شوند را مشخص می کند.

حالا اگر بعدا به مشکل خوردید، می توانید آن را با دستور زیر بازیابی کنید:

sudo dd if=mbr_backup.img of=/dev/sda bs=512 count=1

این دستور، محتویات فایل mbr_backup را می خواند و آن را در دیسک dev/sda/ می نویسد که این کار هم باعث بازیابی MBR می شود.

* هر چه bs بزرگ تر باشد، سرعت کپی بالاتر است.

ایجاد USB قابل بوت

اگر قصد نصب یا راه اندازی سیستم لینوکس خود را دارید و می خواهید این کار را با استفاده از USB انجام دهید، ابتدا باید دستگاه USB موردنظر را بوتیبل کنید که برای این کار می توانید از دستور dd استفاده کنید.

برای ایجاد یک درایو USB قابل بوت، باید فایل iso را به عنوان ورودی و درایو USB را به عنوان فایل خروجی مشخص کنید.

sudo dd if=linux_distro.iso of=/dev/sdX 

اگر قصد افزایش سرعت کپی را دارید می توانید آپشن bs را هم به دستور اضافه کنید و مقدار آن را هم روی 4M تنظیم کنید. البته برای برررسی وضعیت کپی فایل ها از مبدا در مقصد هم می توانید status را روی progress تنظیم کنید.

sudo dd if=linux_distro.iso of=/dev/sdX bs=4M status=progress

بعد از اجرای این دستور می توانید از این دستگاه USB برای عملیات نصب و راه اندازی سیستم عامل استفاده کنید.

کپی محتوا از یک درایو CD/DVD

برای اینکه تمام محتوای موجود در CD یا DVD مربوط به دستگاه dev/cdrom/ را در یک فایل iso کپی کنید و از آن به عنوان یک نسخه ی باینری از دیسک اصلی برای کارهای رایت مجدد یا نصب نرم افزار استفاده کنید، می توانید از دستور زیر استفاده کنید:

sudo dd if=/dev/cdrom of=disk_copy.iso

فشرده سازی اطلاعات خوانده شده توسط dd

گفتیم که کاربرد اصلی dd، کپی کردن داده ها است. حالا اگر بخواهید اندازه فایل را با ابزارهای فشرده سازی کاهش دهید، باید دستور dd را با ابزار موردنظر مثل gzip پایپ کنید:

dd if=/dev/sda bs=1M | gzip -c -9 > sda.dd.gz

دستور بالا dev/sda/ را به عنوان فایل ورودی مشخص می کند و جهت بهبود عملکرد هم اندازه بلوک را روی 1M تنظیم می کند.

سپس داده ها را به دستور gzip پایپ می کند، آپشن c به gzip می گوید که به جای ذخیره کردن فایل، خروجی فشرده شده را به خروجی استاندارد ارسال کند و آپشن ۹ هم بالاترین سطح فشرده سازی را برای فایل خروجی لحاظ می کند.

سپس خروجی که یک نسخه خام از دیسک است در یک فایل فشرده شده به اسم sda.dd.gz ذخیره می شود.

* با توجه به این که یک مرحله فشرده سازی هم به دستور dd اضافه شده است، اجرای دستور بالا می تواند کمی زمان بر باشد.

پاکسازی بلوک دستگاه

اگر به دلایلی مثل فروش سیستم، پاکسازی داده های قبلی یا … قصد دارید داده های دستگاه خود را پاک سازی کنید، باز هم دستور dd لینوکس در کنار شماست.

برای این کار باید dev/zero/ را به عنوان فایل ورودی تعیین کنید و دستگاهی که می خواهید پاکسازی کنید را به عنوان مقدار آپشن of قرار دهید.

sudo dd if=/dev/zero bs=1M of=/dev/sda

dev/zero/ یک سری کاراکتر تهی ارائه می دهد و وقتی دستور dd این کاراکترها را در دستگاه موردنظر می نویسد، محتویات این دستگاه پاک می شود.

اگر به فکر پاکسازی امن تر دادهای سیستم هستید و دوست دارید کاری کنید که بازیابی داده های قبلی دشوارتر باشد، می توانید به جای dev/zero/ از dev/urandom/ استفاده کنید.

sudo dd if=/dev/urandom bs=1M of=/dev/sda

این دستور تمام داده های موجود در دیسک dev/sda/ را حذف می کند و با داده های تصادفی بازنویسی می کند.

سخن آخر 

دستور dd در لینوکس در زمینه هایی مثل کپی داده ها، ایجاد USB قابل بوت، پاکسازی داده ها و … قابل استفاده است و با آپشن های متنوعی که دارد، به کیفیت و سرعت این عملیات کمک می کند.

مطالب مشابهی که شاید علاقمند باشید

من زهرا پیرجانی دانشجوی رشته نرم افزار هستم. علاقه ای که به یادگیری مطالب جدید دارم باعث شد که انگیزم برای فعالیت در حوزه تولیدمحتوا بیشتر شود. تمام تلاشم این است که با درک کامل موضوع، محتوایی ساده و کامل تهیه کنم که برای همه علاقمندان مفید و کاربردی باشد. یادگیری مطالب جدید و آموزش اونها به بقیه، بهترین کاری هست که می توانم برای رشد خودم و همچنین کمک به رشد علاقمندان به مباحث مورنظر انجام بدم.

دیدگاه های شما

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید