এইচডি এলোমেলো করার দ্রুত উপায়?


14

হার্ড ড্রাইভগুলি কীভাবে এনক্রিপশনের জন্য সুরক্ষিত করা যায় সে সম্পর্কে আমি পড়েছি এবং এর মধ্যে একটি ধাপ হ'ল হার্ড ড্রাইভের বাকী ডেটা থেকে এনক্রিপ্ট করা ডেটা পৃথকীকরণের জন্য, ড্রাইভে এলোমেলো বিট লিখতে হবে।

যাইহোক, আমি যখন dd if=/dev/urandom of=/dev/sdaঅতীতে ব্যবহার করার চেষ্টা করেছি তখন ইটিএ কয়েক দিনের ক্রম অনুসারে ছিল। আমি badblocksইউরেনডামের পরিবর্তে ব্যবহার সম্পর্কে কিছু দেখেছি , তবে এটি পুরোপুরি সাহায্য করবে বলে মনে হয় না। আমি কেবল জানতে চাই যে এমন কোনও উপায় রয়েছে যা আমাকে এই গতি বাড়িয়ে তুলতে সহায়তা করতে পারে যেমন যেমন বিকল্পগুলির জন্য ddবা আমি নিখোঁজ হতে পারে এমন কিছু, বা গতি যদি এইচডি এর সীমাবদ্ধতা হয় তবে।


হার্ড ড্রাইভের দিকে আরও বন্ধুত্বপূর্ণ কিছুতে আপনার ব্লকের আকার পরিবর্তন করুন। dd bs=1Mউদাহরণ স্বরূপ.
প্যাট্রিক

আপনি কি গতি পাচ্ছিলেন? পুরো 3 টিবি (উদাহরণস্বরূপ) এইচডিডি লিখতে এটি কিছুটা সময় নেয়। iostat -kx 10ড্রাইভে% কী ব্যস্ত তা দেখতে পরীক্ষা করে দেখুন।
ডারোবার্ট

5
shred -v -n 1 /dev/overwritethisদ্রুত. এটি এমন একমাত্র ক্ষেত্রে যেখানে কোনও কিছুর shredজন্য আসলে কার্যকর।
frostschutz

@ডারবার্ট: আমি কত তাড়াতাড়ি ছিল তা নিশ্চিত করে বলতে পারি না, তবে আমি কয়েক ঘন্টা রেখেছিলাম, ফিরে এসেছি, এবং প্রথমবারের মতো আমার 500 জি অভ্যন্তরীণ এইচডিটির জন্য এটি প্রায় 10% সম্পূর্ণ ছিল। "
আইওস্টাট

@ পেট্রিক: আমি বিএস = 4 এম ধরণের অন্ধভাবে চেষ্টা করেছি, যেহেতু আমি দেখলাম যে কীভাবে একটি ইউএসবিতে আর্কি সিডি লাগানো যায় সেই নির্দেশিকাতে। এটি সামান্য সাহায্য করেছে, তবে এটি এখনও বেশ ধীর ছিল।
bitflips

উত্তর:


14

dd if=/dev/urandom of=/dev/sda, বা সহজভাবে cat /dev/urandom >/dev/sda , এলোমেলো ডেটা সহ কোনও ডিস্ক পূরণের দ্রুততম উপায় নয়। লিনাক্স /dev/urandomদ্রুততম ক্রিপ্টোগ্রাফিক আরএনজি নয় G / দেব / ইউরানডমের বিকল্প আছে কি? কিছু পরামর্শ আছে। বিশেষত, ওপেনএসএসএলে একটি দ্রুত ক্রিপ্টোগ্রাফিক PRNG রয়েছে:

openssl rand $(</proc/partitions awk '$4=="sda" {print $3*1024}') >/dev/sda

মনে রাখবেন যে শেষ পর্যন্ত কোনও উন্নতি হচ্ছে কিনা তার উপর নির্ভর করে কোন অংশটি বাধা: সিপিইউ বা ডিস্ক।

সুসংবাদটি হ'ল ডিস্কটি এলোমেলো ডেটা দিয়ে পূরণ করা বেশিরভাগই অকেজো। প্রথমত, একটি প্রচলিত পৌরাণিক কাহিনীটি দূর করতে, আজকের হার্ডওয়্যারে জিরো দিয়ে মুছে ফেলা ঠিক ততটাই ভাল । 1980 এর হার্ড ডিস্ক প্রযুক্তির সাহায্যে, জিরো দিয়ে একটি হার্ড ডিস্ক ওভাররাইট করা একটি ছোট্ট অবশিষ্টাংশের চার্জ রেখেছিল যা কিছুটা ব্যয়বহুল হার্ডওয়্যার দিয়ে উদ্ধার করা যেতে পারে; এলোমেলোভাবে একাধিক পাস এলোমেলো ডেটা ("গুটম্যান মুছা") দিয়ে প্রয়োজনীয় ছিল। আজ এমনকি শূন্যগুলির সাথে ওভাররাইটিংয়ের একক পাস ডেটা ফেলে দেয় যা পরীক্ষাগার শর্তে এমনকি বাস্তবিক পুনরুদ্ধার করা যায় না।

আপনি যখন কোনও পার্টিশন এনক্রিপ্ট করছেন, এনক্রিপ্ট করা ডেটার গোপনীয়তার জন্য এলোমেলো ডেটা দিয়ে ডিস্কটি পূরণ করা প্রয়োজন হয় না। এটি কেবল তখনই কার্যকর যখন আপনার এনক্রিপ্ট করা ডেটা দ্বারা অব্যবহৃত স্থান থেকে পৃথক করে রাখতে স্থান তৈরি করতে হবে। একটি অ-র্যান্ডমাইজড ধারকটির উপরে একটি এনক্রিপ্ট করা ভলিউম তৈরি করা প্রকাশ করে যে কোন ডিস্ক ব্লকগুলি এনক্রিপ্ট করা ভলিউম দ্বারা ব্যবহৃত হয়েছে। এটি ফাইল সিস্টেমের সর্বাধিক আকার সম্পর্কে একটি ভাল ইঙ্গিত দেয় (যদিও সময়ের সাথে সাথে এটি আরও খারাপ এবং আরও খারাপের সান্নিধ্যে পরিণত হবে), এবং আরও অনেক কিছু।


4
গুটম্যান পুরোপুরি একটি কল্পকাহিনী, আমি মনে করি না এটি আসলে 1980 এর দশকের হার্ড ডিস্কের জন্য কখনও করা হয়েছিল been বিড়ম্বনাটি হ'ল ড্রাইভগুলি আরও স্মার্ট হয়ে উঠার সাথে সাথে আজকাল আপনার এলোমেলো ডেটা ব্যবহার করা উচিত যাতে ফ্রি সেক্টর (ট্রিম) বা সংকোচনের ডেটা না করে ড্রাইভটি লিখতে বাধ্য হয় তা নিশ্চিত করা যায়। জিরোগুলি আসলে লিখিত হলেই ভাল।
frostschutz

1
@ মেলিমারুন হ্যাঁ, cat /dev/zeroপ্রায় সবসময়ই যথেষ্ট। এটি এনক্রিপ্ট করা ভলিউমে কতটা জায়গা ফাঁকা রাখতে চাইলে কেবল তা যথেষ্ট নয়।
গিলস 'তাই মন্দ হওয়া বন্ধ করুন'

1
@ মেলিমারুন এটি অনেকটা অকেজো। একটি ইভাসড্রপ্পার জানতে পারবে যে আপনার সর্বাধিক এক্স এমবি ডেটা রয়েছে (এবং সম্ভবত অনেক কম, কারণ আগে ব্যবহৃত-ব্যবহৃত-কিন্তু এখন-মুক্ত স্থান ব্যবহৃত স্থান থেকে পৃথক পৃথক), তাই কি? এছাড়াও ফাঁকা জায়গার অবস্থান ফাইল সিস্টেমের ধরণের (সুপারব্লক অনুলিপিগুলি) প্রকাশ করতে পারে; এটি খুব কমই উদ্বেগের বিষয় (এটি সাধারণত স্পষ্ট পাঠ্যে প্রকাশিত হয় /etc/fstab, যদি না আপনি মূল বিভাজনটি এনক্রিপ্ট করে থাকেন, এবং তারপরেও এত বড় সংখ্যক প্রশংসনীয় বিকল্প নেই)।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

2
@ গিলস উবুন্টু ১৩.১০-এর মধ্যে আমি যে সমস্যার মধ্যে পড়েছিলাম তা হ'ল এটি openssl randবাইটের সংখ্যার উপরের সীমাবদ্ধতা বলে মনে হয়। যদি আপনি এই সীমাটি অতিক্রম করেন, উদাহরণস্বরূপ 'ওপেনসেল র্যান্ড 81000000000000 , then no random output is generated. Only a brief "help" text is printed. I'm trying to random (pretty much) fill a 3TB hard drive. Not sure if there is a way to get ওপেনস্ল that এতগুলি এলোমেলো বাইট তৈরি করতে।
অযৌক্তিক জন

1
অযৌক্তিক জন এর উচ্চতর সীমা সমস্যার জন্য, 810 বিলিয়ন বাইট প্রায় 754 জিবি থেকে আসে। আপনার ডিস্ককে একাধিক 700-গিগাবাইট পার্টিশনে বিভাজন করা, তারপরে openssl randsda5 থেকে শুরু করে বিভাজনে প্রতিটি পার্টিশনের কমান্ড চালানো বা যা কিছু এবং পিছনে sda1 এবং শেষ পর্যন্ত এসডিএতে কাজ করা?
jia103

6

ওপেনসেলটি আমার পক্ষে কাজ করবে বলে মনে হয় নি। প্রদত্ত সমাধানগুলির সাথে আমি "অজানা বিকল্পগুলি" এবং অন্যান্য সমস্যা পেয়েছি। সুতরাং আমি প্রোগ্রাম ফাইও সঙ্গে শেষ পর্যন্ত।

fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0

24 টি এইচডিডি জুড়ে 19 টিবি করতে 3 ঘন্টা লাগবে বলে মনে হচ্ছে। মোটামুটি 1,800 এমবি / সে

smp-016:~ # fdisk -l /dev/md0
Disk /dev/md0: 18890.1 GB, 18890060464128 bytes

smp-016:~ # fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0
fill: (g=0): rw=write, bs=512M-512M/512M-512M/512M-512M, ioengine=libaio, iodepth=4
fio-2.2.10
Starting 1 process
Jobs: 1 (f=1): [W(1)] [2.7% done] [0KB/1536MB/0KB /s] [0/3/0 iops] [eta 03h:01m:11s]

আমি আশা করি এটি আসলে এলোমেলো ডেটা। ম্যান পেজটি ফাইও বলেছে "ডিফল্ট: এলোমেলো ডেটা দিয়ে বাফারগুলি পূরণ করুন।"http://linux.die.net/man/1/fio

আমি নিরাপদ / এনক্রিপশন উদ্দেশ্যে এটি করছি না, কেবল আমার পরবর্তী পড়ার পরীক্ষাগুলি প্রকৃত ডেটা এবং কেবল 0 এর নয় তা নিশ্চিত করার চেষ্টা করছি। এই একই ফাইও কমান্ডটি এসএসডি / এনভিএম পূর্ব শর্তের জন্য ব্যবহার করা যেতে পারে। ঠিক যেমন / dev / শূন্য ব্যবহার করার ফলে ডিস্ক স্তর সংক্ষেপণ "প্রতারণা" হতে পারে আসলে কতটা লেখা হয়। যদিও আমি একটি যোগ করতে হবে-loops=2 এটিতে পতাকা , যদি এটি বেঞ্চমার্কিংয়ের জন্য একটি নতুন এসএসডি হয়।

আপনি যদি এটি সুরক্ষিত রাখতে চান তবে আপনি এটি ব্যবহার করতে সক্ষম হতে পারেন -randrepeat=bool বিকল্পটি , কারণ এটি "র্যান্ডম নম্বর জেনারেটরকে পূর্বাভাসযোগ্য পদ্ধতিতে বীজ বর্ধন করতে পারে যাতে ফলাফলগুলি রানগুলি জুড়ে পুনরাবৃত্তিযোগ্য Def ডিফল্ট: সত্য" ", তবে আমি এখনও নেই নিশ্চিত যে কত নিরাপদ হবে।

অতিরিক্তভাবে কিছু এন্টারপ্রাইজ শ্রেণীর এইচডিডি রয়েছে সেড (স্ব-এনক্রিপ্টিং ড্রাইভস) এবং তাত্ক্ষণিকভাবে এবং সুরক্ষিতভাবে লিখিত সমস্ত ডেটা মুছে ফেলার জন্য আপনাকে এনক্রিপশন কীটি স্পিন করতে দেয়।

শেষ অবধি, আমি অতীতে ডিবিএএন (ওরফে দারিকের বুট এবং নুকে) ব্যবহার করেছি, যার সিডি এবং ইউএসবি বুটযোগ্য বিকল্প রয়েছে এবং "সোর্সফোর্সে হোস্ট করা একটি ওপেন সোর্স প্রকল্প। প্রোগ্রামটির ডেটা স্থায়ীভাবে না হওয়া পর্যন্ত একটি হার্ড ডিস্ক মুছে ফেলার জন্য ডিজাইন করা হয়েছে program সরানো হয়েছে এবং আর পুনরুদ্ধারযোগ্য নয় "


1
আকার = 100% আমার পক্ষে কাজ করে না, তবে পূরণ_দেখা = 1 (বা ভরাট_ফেস = 1) করেছে।
d.jamison

আমি মনে করি আপনি যদি কোনও ব্লক স্তরের ডিভাইস বা কোনও ফাইল সিস্টেম পূরণ করে তবে তা নির্ভরশীল হবে। ব্লক স্তরের ডিভাইসের সাথে এটি জানে যে এটি কতটা বড় এবং মাপটি ডিভাইসের আকারের এক শতাংশ। ডিভাইসটিতে সম্পূর্ণ ত্রুটি না হওয়া পর্যন্ত ফিল-ডিভাইসগুলি যেখানে যায়। আমি মনে করি পূরণ_দেখার পতাকাটি কোনও ফাইলের ওভাররাইট নাও করতে পারে, কেবল অব্যবহৃত স্থান। আমি এটি পরীক্ষায় ফেলিনি, কারণ আমি সাধারণত ডিভাইস পরীক্ষা করার সময় প্রয়োজনীয় না হলে ফাইল সিস্টেমগুলি এড়িয়ে চলি।
টেলরসানচেজ

6

আপনি /dev/zeroএকটি এলোমেলো পাসওয়ার্ড সহ এনক্রিপ্ট করতে ওপেনএসএসএল পেতে পারেন , খুব দ্রুত শালীন সিউডোর্যান্ডম ডেটা দেয় (যদি আপনার সিপিইউ এটি ত্বরণকে সমর্থন করে)।

openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | dd of=/dev/sda

pvঅগ্রগতি / ইটিএ পেতে আপনি এটিটি পাইপ করতে পারেন। আমি এখনই যে কমান্ডগুলি চালাচ্ছি (রুট শেলের মধ্যে) তা হ'ল:

DISK="sda"
DISKSIZE=$(</proc/partitions awk '$4=="'"$DISK"'" {print sprintf("%.0f",$3*1024)}')
apt-get install pv
openssl enc -aes-256-ctr -nosalt \
  -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" \
  < /dev/zero |
  pv --progress --eta --rate --bytes --size "$DISKSIZE" |
  dd of=/dev/"$DISK" bs=2M

অযৌক্তিক জন হিসাবে একই সমস্যা হওয়ার পরে আমি এই উত্তরটি থেকে এই ধারণাটি পেয়েছি , যিনি উপরের গিলসের উত্তর সম্পর্কে মন্তব্য করেছিলেন । এটি আমার মুছে ফেলার গতি আমার নতুন RAID অ্যারে 11 এমবি / সেকেন্ড থেকে প্রায় 300 এমবি / সেকেন্ডে বাড়িয়েছে, যা এক সপ্তাহে 10 ঘন্টার মধ্যে নেবে taking

আমি যুক্ত করব যে উপরের আরও জটিল স্টেটমেন্টের চেয়ে আপনি ব্যবহার করতে সক্ষম হবেন , তবে একটি বাগ রয়েছে যা কেবলমাত্র 16 এমবি আউটপুট তৈরি করতে দেয় । (এই বাগ দায়ের করা হয়েছে, জানুয়ারী 2016.)openssl rand #of_bytesopenssl enc ...ssl

এবং এই প্রশ্নের উত্তরের হিসাবে এবং ধরে নিই যে সিপিইউ হ'ল বাধা, opensslপৃথক কোরগুলিতে একাধিক সমান্তরাল প্রক্রিয়া চালিয়ে এফআইএফও ব্যবহার করে এটির গতি আরও বাড়ানো সম্ভব হতে পারে ।


নিশ্চিত না যে সম্পাদনাটি প্রয়োজনীয় ছিল। এই প্রশ্নের অন্যান্য উত্তর প্রস্তাব openssl rand
কাঁপুনি

2
বেঞ্চমার্ক:: dd if=/dev/urandom18MiB / s openssl enc,: ~ 180MiB / s fio,: 169MiB / s, openssl randকোনও সমর্থন> 754 জিবি। মনে রাখবেন যদি আপনার কাছে স্বয়ংক্রিয় আকার হিসাব চাই, ব্যবহার করুন: openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt </dev/zero | pv --progress --eta --rate --bytes --size $(</proc/partitions awk '$4=="sda" {print sprintf("%.0f",$3*1024)}') | dd of=/dev/sda bs=2M। সাবধান, sdaএই আদেশে দু'বার উপস্থিত।
ক্রিসওয়েডদেভ

0

মার্কোর উত্তর সম্পূর্ণ করা, আপনার যা প্রয়োজন তা দ্রুত র্যান্ডম নম্বর জেনারেটর।

আপনি একটি সাধারণ প্রোগ্রাম boost::randomব্যবহার করেন যা একটি ভাল লাইব্রেরি থেকে এলোমেলো নম্বরগুলি পছন্দ করে এবং এটিতে ব্যবহার করে dd

আপনি যদি বুস্ট চয়ন করেন তবে আপনি এই উদাহরণটি ব্যবহার করতে পারেন , experimentআপনার প্রয়োজন অনুসারে ফাংশনটি পরিবর্তন করে ।


আপনার সিস্টেমে বুস্ট সলিউশনটি কত দ্রুত? আমার মেশিনে একটি দ্রুত অ-বৈজ্ঞানিক বেঞ্চমার্ক ঠিক একই গতি লাভ করে /dev/urandom
মার্কো

boost::randomএকটি ক্রিপ্টো আরএনজি অফার করে না, তাই না? আপনি যদি নন-ক্রিপ্টো আরএনজি ব্যবহার করতে চলেছেন তবে আপনি শূন্যগুলিও ব্যবহার করতে পারেন: কমপক্ষে আপনার সুরক্ষার কোনও মায়া থাকবে না।
গিলস

আর কত দ্রুত boost::randomজেনারেটর তা সম্পর্কে আমি সুনির্দিষ্ট হতে পারি না , নিশ্চিতভাবে জানার একমাত্র উপায় হ'ল তার দ্রুততম অ্যালগরিদম এর বিরুদ্ধে পরিমাপ করা হচ্ছে/dev/urandom
আরএসফালকন 7

0

ব্লকের আকার বা হার্ডড্রাইভ না থাকলেও সিউডো-এলোমেলো সংখ্যার ধীর প্রজন্ম যদি বাধা দেয়। এটি নিম্ন এনট্রপি পুলে ব্লক করা হচ্ছে না বলে /dev/urandomতুলনায় দ্রুতগতির চেয়ে দ্রুতগতিতে /dev/random

আপনি আপনার সিউডো-এলোমেলো সংখ্যার কাঁচা আউটপুট পরিমাপ করে এটি নিশ্চিত করতে পারেন:

pv /dev/urandom >/dev/null

এই হারটি আপনার হার্ড ড্রাইভের লেখার হারের চেয়ে অনেক ধীর হবে। একটি সঠিক সমাধান সম্পূর্ণরূপে আপনার প্রয়োজনীয় সুরক্ষার স্তরের উপর নির্ভর করে। আপনার যদি উচ্চ সুরক্ষা প্রয়োজন হয় একটি দ্রুত হার্ডওয়্যার র্যান্ডম জেনারেটর ব্যবহার করুন বা ধীর গতি গ্রহণ করুন। যদি আপনার সুরক্ষা প্রয়োজনগুলি বেশি না হয় তবে আপনি কয়েক ডজন এমআইবি ডেটা ক্যাপচার করতে পারেন এবং সেই স্ট্রিংটি বারবার ড্রাইভে লিখতে পারেন। অথবা এমনকি থেকে জিরো লেখাও /dev/zeroএকটি বিকল্প।

সারসংক্ষেপ

/dev/random - সুরক্ষিত, খুব ধীর
/dev/urandom- কম
সুরক্ষিত - ধীর হার্ডওয়্যার আরএনজি - নিরাপদ, দ্রুত, খুব ব্যয়বহুল
( /dev/zero - এলোমেলো নয়, খুব দ্রুত)

To অনুসারে / dev / ইউরেন্ডম থেকে একটি র‌্যান্ড লগইন কী জন্য নিরাপদ? /dev/urandomহিসাবে নিরাপদ /dev/random। গিলসকে এটি নির্দেশ করার জন্য ধন্যবাদ।


তিনি ইতিমধ্যে ব্যবহার করছেন urandom
প্যাট্রিক

প্রকৃতপক্ষে. আমার বক্তব্যটি হ'ল এমনকি ইউরানডমও তার প্রয়োজনের জন্য খুব ধীর গতির কারণেই তাকে ইউরানডমের চেয়ে আলাদা সমাধানের প্রয়োজন।
মার্কো


@ গিলিস লিঙ্কের জন্য ধন্যবাদ। ম্যান পেজটি পরিষ্কারভাবে বলেছে: … ফলস্বরূপ, যদি এনট্রপি পুলে পর্যাপ্ত এনট্রপি না পাওয়া যায় তবে প্রত্যাবর্তিত মানগুলি তাত্ত্বিকভাবে একটি ক্রিপ্টোগ্রাফিক আক্রমণে ঝুঁকিপূর্ণ হয় ... এজন্য আমি এটিকে কম সুরক্ষিত হিসাবে শ্রেণিবদ্ধ করেছি।
মার্কো

0

আমি একটি 4 টিবি বহিরাগত ইউএসবি এইচডিডি পূরণ করার চেষ্টা করছিলাম dd if=/dev/urandom of=/dev/sdX status=progressযার সাথে উপায়টি খুব ধীর ( bs=সেটিংস নির্বিশেষে ) ছিল এবং এটি মনে হয় যে opensslএটি কতটা এলোমেলো ডেটা আউটপুট দেবে (অন্তত সংস্করণ 1.0.2p এর জন্য) তার একটি ক্যাপ রয়েছে। আমি খুঁজে পেল সেরা বিকল্পটি হ'ল ব্যবহারের shredমতো ফ্রয়েস্টচুটজ থেকে প্রাপ্ত মন্তব্য :

shred -v -n 1 /dev/sdX

-n 1অন্যথায় এটি ডিভাইসটি 3 বার লিখার ক্ষেত্রে ডিফল্ট হয়ে যাবে তা নিশ্চিত করুন (প্লাস -vযা অগ্রগতি দেখায়)। আমি মনে করি না যে সিউডো-এলোমেলো সংখ্যার গুণমানটি এত বেশি, তবে এনক্রিপশনের জন্য বৃহত ক্ষমতার বহনযোগ্য এইচডিডি প্রস্তুত করা আমার পক্ষে যথেষ্ট।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.