'\" t .\" Title: luksmeta .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 03/19/2026 .\" Manual: \ \& .\" Source: \ \& .\" Language: Persian .\" .TH "LUKSMETA" "8" "03/19/2026" "\ \&" "\ \&" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" luksmeta \- ابزاری برای ذخیره‌سازی فراداده در هدر LUKSv1 .SH "خلاصه دستور (SYNOPSIS)" .sp \fBluksmeta test\fR \-d DEVICE .sp \fBluksmeta nuke\fR \-d DEVICE [\-f] .sp \fBluksmeta init\fR \-d DEVICE [\-f] [\-n] .sp \fBluksmeta show\fR \-d DEVICE [\-s SLOT] .sp \fBluksmeta save\fR \-d DEVICE [\-s SLOT] \-u UUID < DATA .sp \fBluksmeta load\fR \-d DEVICE \-s SLOT [\-u UUID] > DATA .sp \fBluksmeta wipe\fR \-d DEVICE \-s SLOT [\-u UUID] [\-f] .SH "نمای کلی (OVERVIEW)" .sp ابزار \fBluksmeta\fR به مدیر سیستم امکان می‌دهد تا فراداده‌ها را در فاصله خالی میان پایان هدر LUKSv1 و آغاز داده‌های رمزنگاری‌شده ذخیره کند\&. این قابلیت برای ذخیره داده‌هایی که پیش از بازگشایی قفل حجم در دسترس هستند، معمولاً جهت استفاده در طول فرآیند باز کردن قفل حجم، بسیار سودمند است\&. .sp فراداده در مجموعه‌ای از اسلات‌های دارای نوع شناسه یکتا (UUID) ذخیره می‌شود که امکان نگهداری چندین بلوک فراداده را فراهم می‌کند\&. گرچه اسلات‌های \fBluksmeta\fR از اسلات‌های LUKS الهام گرفته شده‌اند، اما از نظر عملکردی کاملاً مستقل هستند و صرفاً ارتباطی غیرالزامی با یکدیگر دارند\&. اسلات‌ها صرفاً نشان می‌دهند که یک قطعه فراداده معین با یک رمز عبور مشخص در LUKSv1 (در اسلاتی با شماره مشابه) در ارتباط است\&. با این حال، خود \fBluksmeta\fR نسبت به ارتباط میان یک اسلات LUKSv1 و اسلات هم‌شماره آن در \fBluksmeta\fR بی‌تفاوت است، به‌جز یک استثنا (که در ادامه به تفصیل آمده است)\&. .sp پس از اینکه یک حجم LUKSv1 با استفاده از \fBcryptsetup\fR(8) مقداردهی اولیه شد، باید برای ذخیره‌سازی فراداده نیز توسط \fBluksmeta init\fR مقداردهی اولیه شود\&. پس از تکمیل این مرحله، دستگاه آماده ذخیره‌سازی فراداده خواهد بود\&. .sp داده‌ها را می‌توان با استفاده از \fBluksmeta save\fR در یک اسلات نوشت یا با استفاده از \fBluksmeta load\fR از یک اسلات خواند\&. شما همچنین می‌توانید داده‌های موجود در یک اسلات را با استفاده از \fBluksmeta wipe\fR پاک کنید یا با استفاده از \fBluksmeta show\fR وضعیت اسلات‌ها را جویا شوید\&. .SH "تولید شناسه یکتا (UUID GENERATION)" .sp اغلب چنین تصور می‌شود که ذخیره فراداده در یک اسلات نیازمند یک UUID مشخص است یا یک مرجع رسمی ثبت انواع UUID وجود دارد\&. این تصور نادرست است\&. .sp عبارت UUID مخفف Universally Unique IDentifier (شناسه یکتای جهانی) است\&. شناسه‌های UUID یک نوع داده استاندارد و پرکاربرد هستند که برای شناسایی بدون نیاز به یک مرجع مرکزی به کار می‌روند\&. برای استانداردهای مرتبط، به ISO 9834\-8:2005 و RFC 4122 مراجعه کنید\&. .sp شناسه‌های UUID به‌اندازه کافی بزرگ هستند که برخورد و تداخل آن‌ها در عمل ناممکن است\&. بنابراین اگر برنامه شما می‌خواهد داده‌ها را در یک اسلات \fBluksmeta\fR ذخیره کند، کافی است UUID اختصاصی خود را تولید کنید و همواره از آن برای ارجاع به نوع داده خود بهره ببرید\&. اگر چندین نوع داده دارید، می‌توانید آزادانه چندین UUID تولید کنید\&. .sp ساده‌ترین روش برای تولید یک UUID استفاده از \fBuuidgen\fR(1) است\&. با این حال، هر تولیدکننده UUID سازگار با استاندارد کفایت می‌کند\&. .SH "مقداردهی اولیه (INITIALIZATION)" .sp پیش از خواندن یا نوشتن فراداده، دستگاه بلوکی LUKSv1 باید برای ذخیره‌سازی فراداده مقداردهی اولیه شود\&. سه دستور در این فرآیند کمک می‌کنند: \fBluksmeta test\fR، \fBluksmeta nuke\fR و \fBluksmeta init\fR\&. .sp دستور \fBluksmeta test\fR صرفاً یک دستگاه بلوکی موجود را بررسی می‌کند تا مشخص شود آیا برای ذخیره‌سازی فراداده مقداردهی اولیه شده است یا خیر\&. این دستور هیچ خروجی متنی تولید نمی‌کند، بنابراین حتماً کد بازگشتی آن را بررسی کنید (بخش زیر را ببینید)\&. .sp دستور \fBluksmeta nuke\fR تمام فضای خالی هدر LUKSv1 را صفر (پاکسازی) می‌کند\&. از آنجا که این عملیات تخریب‌کننده است، پیش از پاکسازی این فضا نیاز به تایید کاربر خواهد بود مگر اینکه گزینه \fB\-f\fR داده شده باشد\&. .sp دستور \fBluksmeta init\fR دستگاه بلوکی LUKSv1 را برای ذخیره‌سازی فراداده مقداردهی اولیه می‌کند\&. این فرآیند تمام داده‌های موجود در فاصله خالی هدر LUKSv1 را پاک خواهد کرد\&. به همین دلیل، این دستور پیش از نوشتن هرگونه داده نیاز به تایید کاربر دارد مگر اینکه گزینه \fB\-f\fR مشخص شده باشد\&. توجه داشته باشید که اگر دستگاه از قبل مقداردهی اولیه شده باشد، این دستور بدون اعمال هیچ تغییری با موفقیت پایان می‌یابد\&. اگر می‌خواهید ایجاد یک وضعیت مقداردهی اولیه تمیز را تحمیل کنید، می‌توانید گزینه \fB\-n\fR را مشخص نمایید تا فاصله خالی هدر LUKSv1 پیش از مقداردهی اولیه (اما پس از تایید کاربر) به‌طور کامل پاکسازی شود\&. .SH "وضعیت فراداده (METADATA STATE)" .sp دستور \fBluksmeta show\fR وضعیت کنونی اسلات‌ها را روی دستگاه بلوکی LUKSv1 نمایش می‌دهد\&. اگر اسلاتی مشخص نشود، جدولی شامل شماره اسلات، وضعیت اسلات متناظر در LUKSv1 و UUID داده‌های ذخیره‌شده در اسلات \fBluksmeta\fR (یا عبارت "empty" در صورتی که داده‌ای ذخیره نشده باشد) را چاپ می‌کند\&. اگر یک اسلات مشخص شود، این دستور صرفاً شناسه UUID داده موجود در اسلات را چاپ می‌کند\&. در صورتی که اسلات حاوی داده نباشد، چیزی چاپ نمی‌شود\&. .SH "مدیریت فراداده (MANAGING METADATA)" .sp مدیریت فراداده در اسلات‌ها با سه دستور انجام می‌شود: \fBluksmeta save\fR، \fBluksmeta load\fR و \fBluksmeta wipe\fR\&. این دستورات به‌ترتیب فراداده را در یک اسلات می‌نویسند، فراداده را از یک اسلات می‌خوانند و فراداده را در یک اسلات پاک می‌کنند\&. .sp دستور \fBluksmeta save\fR فراداده را از ورودی استاندارد می‌خواند و آن را با استفاده از UUID مشخص‌شده در اسلات تعیین‌شده می‌نویسد\&. اگر اسلاتی مشخص نشود، \fBluksmeta\fR اولین شماره اسلاتی را جستجو می‌کند که اسلات متناظر LUKSv1 آن غیرفعال و اسلات \fBluksmeta\fR آن خالی باشد\&. این مورد تنها ارتباط رسمی میان اسلات‌های LUKSv1 و اسلات‌های \fBluksmeta\fR را نشان می‌دهد\&. در این حالت، فراداده با استفاده از UUID تعیین‌شده در نخستین اسلات قابل استفاده نوشته می‌شود و شماره اسلات در خروجی استاندارد چاپ می‌گردد\&. در هر دو حالت، این دستور هرگز روی داده‌های موجود بازنویسی نخواهد کرد\&. برای جایگزینی داده‌ها در یک اسلات، باید پیش از \fBluksmeta save\fR دستور \fBluksmeta wipe\fR را اجرا کنید\&. .sp دستور \fBluksmeta load\fR داده‌ها را از اسلات مشخص‌شده می‌خواند و در خروجی استاندارد می‌نویسد\&. اگر یک UUID مشخص شده باشد، دستور بررسی می‌کند که آیا UUID مرتبط با فراداده در آن اسلات با UUID مشخص‌شده مطابقت دارد یا خیر\&. این بررسی نوع داده کمک می‌کند تا اطمینان یابید همواره نوع داده‌ای را دریافت می‌کنید که انتظارش را دارید\&. اگر شناسه‌های UUID مطابقت نداشته باشند، دستور با شکست مواجه می‌شود\&. .sp دستور \fBluksmeta wipe\fR داده‌ها را از اسلات داده‌شده پاک می‌کند\&. اگر یک UUID مشخص شود، دستور بررسی می‌کند که آیا UUID مرتبط با فراداده در آن اسلات با UUID مشخص‌شده مطابقت دارد یا خیر\&. این بررسی نوع داده تضمین می‌کند که تنها داده‌ای را پاک کنید که قصد پاکسازی آن را داشته‌اید\&. از آنجا که این یک عملیات تخریب‌کننده است، پیش از پاکسازی هرگونه داده، نیاز به تایید کاربر خواهد بود مگر اینکه گزینه \fB\-f\fR داده شده باشد\&. توجه داشته باشید که تلاش برای پاک کردن اسلاتی که از قبل خالی است، با موفقیت همراه خواهد بود\&. .SH "هشدارها (CAVEATS)" .sp میزان فضای ذخیره‌سازی در فاصله خالی هدر LUKSv1 بسیار محدود است\&. این فضا همچنین بر اساس پیکربندی استفاده‌شده توسط LUKSv1 در زمان مقداردهی اولیه دستگاه متفاوت است\&. در برخی از پیکربندی‌های LUKSv1، حتی فضای کافی برای تمام اسلات‌های فراداده حتی در کوچک‌ترین اندازه ممکن اسلات نیز وجود ندارد\&. .sp هنگام طراحی این ابزار، این احتمال در نظر گرفته شد که کاربران مایل باشند تعداد اسلات‌های قابل استفاده را به ازای فضای ذخیره‌سازی بیشتر در اسلات‌های به‌کاررفته کاهش دهند\&. به‌منظور ارائه این انعطاف‌پذیری، میزان فضای در دسترس برای هر اسلات پویا است\&. به بیان ساده، اندازه اسلات‌ها ثابت نیست\&. این بدان معناست که این احتمال وجود دارد (و حتی تا حدی محتمل است) که در حین اجرای \fBluksmeta save\fR با خطایی مبنی بر ناکافی بودن فضا مواجه شوید\&. .sp این خطا یک باگ برنامه‌نویسی نیست\&. اگر با این خطا روبرو شدید، احتمالاً به این معناست که یا تمام فضا توسط اسلات‌های از قبل نوشته‌شده مصرف شده، یا اینکه فراداده‌ای که قصد نوشتن آن را دارید در فضای موجود جا نمی‌شود\&. .sp می‌توانید با اجرای \fBluksmeta wipe\fR روی اسلات‌هایی که دیگر استفاده نمی‌شوند، این مشکل را حل کنید\&. این کار فضای ذخیره‌سازی را برای استفاده سایر اسلات‌ها آزاد می‌کند\&. با این حال، توجه داشته باشید که \fBluksmeta\fR در حال حاضر عملیات یکپارچه‌سازی دیسک (defragmentation) انجام نمی‌دهد زیرا تعداد بلوک‌های قابل استفاده محدود است\&. می‌توانید با استخراج داده‌های همه اسلات‌ها، پاک کردن آن‌ها و بارگذاری مجددشان به ترتیب، به‌صورت دستی این محدودیت را برطرف سازید\&. با این حال، این عملیات بالقوه خطرناک است و باید با دقت بسیار بالایی انجام شود\&. .SH "گزینه‌ها (OPTIONS)" .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-d\fR \fIDEVICE\fR, \fB\-\-device\fR=\fIDEVICE\fR : دستگاهی که عملیات روی آن انجام می‌شود\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-s\fR \fISLOT\fR, \fB\-\-slot\fR=\fISLOT\fR : شماره اسلاتی که عملیات روی آن انجام می‌گیرد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-u\fR \fIUUID\fR, \fB\-\-uuid\fR=\fIUUID\fR : شناسه UUID مرتبط با عملیات\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-f\fR, \fB\-\-force\fR : سرکوب اجباری تمامی درخواست‌های تایید کاربر\&. .RE .SH "کدهای خروجی (RETURN VALUES)" .sp این دستور از مقادیر بازگشتی تعریف‌شده در \fBsysexits\&.h\fR استفاده می‌کند\&. موارد زیر خطاهای عمومی (و کدهای خروج عددی متناظر با آن‌ها) هستند که معنای آن‌ها میان تمام دستورات \fBluksmeta\fR مشترک است: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBEX_OK\fR (0): عملیات با موفقیت انجام شد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBEX_USAGE\fR (64): برنامه با پارامترهای نامعتبر فراخوانی شده است\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBEX_DATAERR\fR (65): شناسه UUID مشخص‌شده با UUID اسلات مطابقت ندارد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBEX_NOINPUT\fR (66): خطایی هنگام خواندن از ورودی استاندارد رخ داده است\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBEX_OSERR\fR (71): یک خطای تعریف‌نشده در سیستم‌عامل رخ داده است\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBEX_OSFILE\fR (72): دستگاه مقداردهی اولیه نشده یا دچار آسیب شده است\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBEX_CANTCREAT\fR (73): فضای کافی در هدر LUKSv1 وجود ندارد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBEX_IOERR\fR (74): هنگام نوشتن روی دستگاه خطای ورودی/خروجی (I/O) رخ داده است\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBEX_NOPERM\fR (77): کاربر در طول درخواست تایید، مجوز لازم را اعطا نکرد\&. .RE .sp علاوه بر این، \fBluksmeta save\fR هنگامی که تلاش کنید داده‌ها را در اسلاتی که از قبل پر شده ذخیره نمایید، کد \fBEX_UNAVAILABLE\fR را بازمی‌گرداند\&. به همین ترتیب، \fBluksmeta load\fR نیز هنگامی که تلاش کنید از یک اسلات خالی داده بخوانید، کد \fBEX_UNAVAILABLE\fR را برمی‌گرداند\&. .SH "مثال‌ها (EXAMPLES)" .sp از بین بردن تمام داده‌ها (شامل داده‌های LUKSMeta) در فاصله خالی هدر LUKSv1 و مقداردهی اولیه این فضا برای ذخیره‌سازی LUKSMeta: .sp .if n \{\ .RS 4 .\} .nf $ luksmeta init \-n \-f \-d /dev/sdz .fi .if n \{\ .RE .\} .sp اگر قبلاً مقداردهی اولیه شده کاری انجام نشود؛ در غیر این صورت، از بین بردن تمام داده‌های غیر LUKSMeta در فاصله خالی هدر LUKSv1 و مقداردهی اولیه این فضا برای ذخیره‌سازی LUKSMeta: .sp .if n \{\ .RS 4 .\} .nf $ luksmeta init \-f \-d /dev/sdz .fi .if n \{\ .RE .\} .sp نوشتن داده در یک اسلات: .sp .if n \{\ .RS 4 .\} .nf $ UUID=*uuidgen* $ echo $UUID 31c25e3b\-b8e2\-4eaa\-a427\-23aa882feef2 $ echo "Hello, World" | luksmeta save \-d /dev/sdz \-s 0 \-u $UUID .fi .if n \{\ .RE .\} .sp بازخوانی داده‌ها: .sp .if n \{\ .RS 4 .\} .nf $ luksmeta load \-d /dev/sdz \-s 0 \-u $UUID Hello, World .fi .if n \{\ .RE .\} .sp پاک کردن داده‌ها از اسلات: .sp .if n \{\ .RS 4 .\} .nf $ luksmeta wipe \-d /dev/sdz \-s 0 \-u $UUID .fi .if n \{\ .RE .\} .sp پاک کردن تمامی آثار و نشانه‌های LUKSMeta: .sp .if n \{\ .RS 4 .\} .nf $ luksmeta nuke \-f \-d /dev/sdz .fi .if n \{\ .RE .\} .SH "نویسندگان (AUTHORS)" .sp Nathaniel McCallum .SH "همچنین ببینید (SEE ALSO)" .sp \fBcryptsetup\fR(8), \fBuuidgen\fR(1)