VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/docs/TestBoxImaging.html@ 64498

最後變更 在這個檔案從64498是 64498,由 vboxsync 提交於 8 年 前

ValidationKit: Exploratory notes on testbox backup and restore.

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 23.3 KB
 
1<?xml version="1.0" encoding="utf-8" ?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4<head>
5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
7<title></title>
8<style type="text/css">
9
10/*
11:Author: David Goodger ([email protected])
12:Id: $Id: TestBoxImaging.html 64498 2016-11-01 04:39:14Z vboxsync $
13:Copyright: This stylesheet has been placed in the public domain.
14
15Default cascading style sheet for the HTML output of Docutils.
16
17See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
18customize this style sheet.
19*/
20
21/* used to remove borders from tables and images */
22.borderless, table.borderless td, table.borderless th {
23 border: 0 }
24
25table.borderless td, table.borderless th {
26 /* Override padding for "table.docutils td" with "! important".
27 The right padding separates the table cells. */
28 padding: 0 0.5em 0 0 ! important }
29
30.first {
31 /* Override more specific margin styles with "! important". */
32 margin-top: 0 ! important }
33
34.last, .with-subtitle {
35 margin-bottom: 0 ! important }
36
37.hidden {
38 display: none }
39
40a.toc-backref {
41 text-decoration: none ;
42 color: black }
43
44blockquote.epigraph {
45 margin: 2em 5em ; }
46
47dl.docutils dd {
48 margin-bottom: 0.5em }
49
50object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
51 overflow: hidden;
52}
53
54/* Uncomment (and remove this text!) to get bold-faced definition list terms
55dl.docutils dt {
56 font-weight: bold }
57*/
58
59div.abstract {
60 margin: 2em 5em }
61
62div.abstract p.topic-title {
63 font-weight: bold ;
64 text-align: center }
65
66div.admonition, div.attention, div.caution, div.danger, div.error,
67div.hint, div.important, div.note, div.tip, div.warning {
68 margin: 2em ;
69 border: medium outset ;
70 padding: 1em }
71
72div.admonition p.admonition-title, div.hint p.admonition-title,
73div.important p.admonition-title, div.note p.admonition-title,
74div.tip p.admonition-title {
75 font-weight: bold ;
76 font-family: sans-serif }
77
78div.attention p.admonition-title, div.caution p.admonition-title,
79div.danger p.admonition-title, div.error p.admonition-title,
80div.warning p.admonition-title, .code .error {
81 color: red ;
82 font-weight: bold ;
83 font-family: sans-serif }
84
85/* Uncomment (and remove this text!) to get reduced vertical space in
86 compound paragraphs.
87div.compound .compound-first, div.compound .compound-middle {
88 margin-bottom: 0.5em }
89
90div.compound .compound-last, div.compound .compound-middle {
91 margin-top: 0.5em }
92*/
93
94div.dedication {
95 margin: 2em 5em ;
96 text-align: center ;
97 font-style: italic }
98
99div.dedication p.topic-title {
100 font-weight: bold ;
101 font-style: normal }
102
103div.figure {
104 margin-left: 2em ;
105 margin-right: 2em }
106
107div.footer, div.header {
108 clear: both;
109 font-size: smaller }
110
111div.line-block {
112 display: block ;
113 margin-top: 1em ;
114 margin-bottom: 1em }
115
116div.line-block div.line-block {
117 margin-top: 0 ;
118 margin-bottom: 0 ;
119 margin-left: 1.5em }
120
121div.sidebar {
122 margin: 0 0 0.5em 1em ;
123 border: medium outset ;
124 padding: 1em ;
125 background-color: #ffffee ;
126 width: 40% ;
127 float: right ;
128 clear: right }
129
130div.sidebar p.rubric {
131 font-family: sans-serif ;
132 font-size: medium }
133
134div.system-messages {
135 margin: 5em }
136
137div.system-messages h1 {
138 color: red }
139
140div.system-message {
141 border: medium outset ;
142 padding: 1em }
143
144div.system-message p.system-message-title {
145 color: red ;
146 font-weight: bold }
147
148div.topic {
149 margin: 2em }
150
151h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
152h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
153 margin-top: 0.4em }
154
155h1.title {
156 text-align: center }
157
158h2.subtitle {
159 text-align: center }
160
161hr.docutils {
162 width: 75% }
163
164img.align-left, .figure.align-left, object.align-left {
165 clear: left ;
166 float: left ;
167 margin-right: 1em }
168
169img.align-right, .figure.align-right, object.align-right {
170 clear: right ;
171 float: right ;
172 margin-left: 1em }
173
174img.align-center, .figure.align-center, object.align-center {
175 display: block;
176 margin-left: auto;
177 margin-right: auto;
178}
179
180.align-left {
181 text-align: left }
182
183.align-center {
184 clear: both ;
185 text-align: center }
186
187.align-right {
188 text-align: right }
189
190/* reset inner alignment in figures */
191div.align-right {
192 text-align: inherit }
193
194/* div.align-center * { */
195/* text-align: left } */
196
197ol.simple, ul.simple {
198 margin-bottom: 1em }
199
200ol.arabic {
201 list-style: decimal }
202
203ol.loweralpha {
204 list-style: lower-alpha }
205
206ol.upperalpha {
207 list-style: upper-alpha }
208
209ol.lowerroman {
210 list-style: lower-roman }
211
212ol.upperroman {
213 list-style: upper-roman }
214
215p.attribution {
216 text-align: right ;
217 margin-left: 50% }
218
219p.caption {
220 font-style: italic }
221
222p.credits {
223 font-style: italic ;
224 font-size: smaller }
225
226p.label {
227 white-space: nowrap }
228
229p.rubric {
230 font-weight: bold ;
231 font-size: larger ;
232 color: maroon ;
233 text-align: center }
234
235p.sidebar-title {
236 font-family: sans-serif ;
237 font-weight: bold ;
238 font-size: larger }
239
240p.sidebar-subtitle {
241 font-family: sans-serif ;
242 font-weight: bold }
243
244p.topic-title {
245 font-weight: bold }
246
247pre.address {
248 margin-bottom: 0 ;
249 margin-top: 0 ;
250 font: inherit }
251
252pre.literal-block, pre.doctest-block, pre.math, pre.code {
253 margin-left: 2em ;
254 margin-right: 2em }
255
256pre.code .ln { color: grey; } /* line numbers */
257pre.code, code { background-color: #eeeeee }
258pre.code .comment, code .comment { color: #5C6576 }
259pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
260pre.code .literal.string, code .literal.string { color: #0C5404 }
261pre.code .name.builtin, code .name.builtin { color: #352B84 }
262pre.code .deleted, code .deleted { background-color: #DEB0A1}
263pre.code .inserted, code .inserted { background-color: #A3D289}
264
265span.classifier {
266 font-family: sans-serif ;
267 font-style: oblique }
268
269span.classifier-delimiter {
270 font-family: sans-serif ;
271 font-weight: bold }
272
273span.interpreted {
274 font-family: sans-serif }
275
276span.option {
277 white-space: nowrap }
278
279span.pre {
280 white-space: pre }
281
282span.problematic {
283 color: red }
284
285span.section-subtitle {
286 /* font-size relative to parent (h1..h6 element) */
287 font-size: 80% }
288
289table.citation {
290 border-left: solid 1px gray;
291 margin-left: 1px }
292
293table.docinfo {
294 margin: 2em 4em }
295
296table.docutils {
297 margin-top: 0.5em ;
298 margin-bottom: 0.5em }
299
300table.footnote {
301 border-left: solid 1px black;
302 margin-left: 1px }
303
304table.docutils td, table.docutils th,
305table.docinfo td, table.docinfo th {
306 padding-left: 0.5em ;
307 padding-right: 0.5em ;
308 vertical-align: top }
309
310table.docutils th.field-name, table.docinfo th.docinfo-name {
311 font-weight: bold ;
312 text-align: left ;
313 white-space: nowrap ;
314 padding-left: 0 }
315
316/* "booktabs" style (no vertical lines) */
317table.docutils.booktabs {
318 border: 0px;
319 border-top: 2px solid;
320 border-bottom: 2px solid;
321 border-collapse: collapse;
322}
323table.docutils.booktabs * {
324 border: 0px;
325}
326table.docutils.booktabs th {
327 border-bottom: thin solid;
328 text-align: left;
329}
330
331h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
332h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
333 font-size: 100% }
334
335ul.auto-toc {
336 list-style-type: none }
337
338</style>
339</head>
340<body>
341<div class="document">
342
343
344<div class="section" id="testbox-imaging-backup-restore">
345<h1>Testbox Imaging (Backup / Restore)</h1>
346<div class="section" id="introduction">
347<h2>Introduction</h2>
348<p>This document is explores deloying a very simple drive imaging solution to help
349avoid needing to manually reinstall testboxes when a disk goes bust or the OS
350install seems to be corrupted.</p>
351</div>
352</div>
353<div class="section" id="definitions-glossary">
354<h1>Definitions / Glossary</h1>
355<p>See AutomaticTestingRevamp.txt.</p>
356</div>
357<div class="section" id="objectives">
358<h1>Objectives</h1>
359<blockquote>
360<ul class="simple">
361<li>Off site, no admin interaction (no need for ILOM or similar).</li>
362<li>OS independent.</li>
363<li>Space and bandwidth efficient.</li>
364<li>As automatic as possible.</li>
365<li>Logging.</li>
366</ul>
367</blockquote>
368</div>
369<div class="section" id="overview-of-the-solution">
370<h1>Overview of the Solution</h1>
371<p>Here is a brief summary:</p>
372<blockquote>
373<ul class="simple">
374<li>Always boot testboxes via PXE using PXELINUX.</li>
375<li>Default configuration is local boot (hard disk / SSD)</li>
376<li>Restore/backup action triggered by machine specific PXE config.</li>
377<li>Boots special debian maintenance install off NFS.</li>
378<li>A maintenance service (systemd style) does the work.</li>
379<li>The service reads action from TFTP location and performs it.</li>
380<li>When done the service removes the TFTP machine specific config
381and reboots the system.</li>
382</ul>
383</blockquote>
384<dl class="docutils">
385<dt>Maintenance actions are:</dt>
386<dd><ul class="first last simple">
387<li>backup</li>
388<li>redo-backup</li>
389<li>restore</li>
390</ul>
391</dd>
392</dl>
393<p>Possible modifier that indicates a subset of disk on testboxes with other OSes
394installed. Support for partition level backup/restore is not explored here.</p>
395</div>
396<div class="section" id="storage-server">
397<h1>Storage Server</h1>
398<p>The storage server will have three areas used here. Using NFS for all three
399avoids extra work getting CIFS sharing right too (NFS is already a pain).</p>
400<blockquote>
401<ol class="arabic simple">
402<li>/exports/testbox-tftp - TFTP config area. Read-write.</li>
403<li>/exports/testbox-backup - Images and logs. Read-write.</li>
404<li>/exports/testbox-nfsroot - Custom debian. Read-only, no root squash.</li>
405</ol>
406</blockquote>
407</div>
408<div class="section" id="tftp-exports-testbox-tftp">
409<h1>TFTP (/exports/testbox-tftp)</h1>
410<p>The testbox-tftp share needs to be writable, root squashing is okay.</p>
411<p>We need files from both PXELINUX and SYSLINUX to make this work now. On a
412debian system, the <tt class="docutils literal">pxelinux</tt> and <tt class="docutils literal">syslinux</tt> packages needs to be
413installed. We actually do this further down when setting up the nfsroot, so
414it's possible to get them from there by postponing this step a little. On
415debian 8.6.0 the PXELINUX files are found in <tt class="docutils literal">/usr/lib/PXELINUX</tt> and the
416SYSLINUX ones in <tt class="docutils literal">/usr/lib/syslinux</tt>.</p>
417<p>The initial PXE image as well as associated modules comes in three variants,
418BIOS, 32-bit EFI and 64-bit EFI. We'll only need the BIOS one for now.
419Perform the following copy operations:</p>
420<pre class="literal-block">
421cp /usr/lib/PXELINUX/pxelinux.0 testbox-tftp/
422cp /usr/lib/syslinux/modules/*/ldlinux.* testbox-tftp/
423cp /usr/lib/syslinux/modules/bios testbox-tftp/
424cp /usr/lib/syslinux/modules/efi32 testbox-tftp/
425cp /usr/lib/syslinux/modules/efi64 testbox-tftp/
426</pre>
427<p>For simplicitly, all the testboxes boot using good old fashioned BIOS, no EFI.
428However, it doesn't really hurt to be prepared.</p>
429<p>The PXELINUX related files goes in the root of the testbox-tftp share. (As
430mentioned further down, these can be installed on a debian system by running
431<tt class="docutils literal"><span class="pre">apt-get</span> install pxelinux syslinux</tt>.) We need the <tt class="docutils literal">*pxelinux.0</tt> files
432typically found in <tt class="docutils literal">/usr/lib/PXELINUX/</tt> on debian systems (recent ones
433anyway). It is possible we may need one ore more fo the modules <a class="footnote-reference" href="#id6" id="id1">[1]</a> that
434ships with PXELINUX/SYSLINUX, so do copy <tt class="docutils literal">/usr/lib/syslinux/modules</tt> to
435<tt class="docutils literal"><span class="pre">testbox-tftp/modules</span></tt> as well.</p>
436<p>The directory layout related to the configuration files is dictated by the
437PXELINUX configuration file searching algorithm <a class="footnote-reference" href="#id7" id="id2">[2]</a>. Create a subdirectory
438<tt class="docutils literal">pxelinux.cfg/</tt> under <tt class="docutils literal"><span class="pre">testbox-tftp</span></tt> and create the world readable file
439<tt class="docutils literal">default</tt> with the following content:</p>
440<pre class="literal-block">
441PATH bios
442DEFAULT local-boot
443LABEL local-boot
444LOCALBOOT
445</pre>
446<p>This will make the default behavior to boot the local disk system.</p>
447</div>
448<div class="section" id="images-and-logs-exports-testbox-backup">
449<h1>Images and logs (/exports/testbox-backup)</h1>
450<p>The testbox-backup share needs to be writable, root squashing is okay.</p>
451<p>We use a directory layout based on dotted decimal IP addresses here, so for a
452server with the IP 10.40.41.42 all its file will be under <tt class="docutils literal">10.40.41.42/</tt>.</p>
453<p>Files found under <tt class="docutils literal">10.40.41.42/</tt>:</p>
454<dl class="docutils">
455<dt><tt class="docutils literal">&lt;hostname&gt;</tt></dt>
456<dd>The name of the testbox (empty file). Help finding a testbox by name.</dd>
457<dt><tt class="docutils literal"><span class="pre">testbox-info.txt</span></tt></dt>
458<dd>Information about the testbox. Starting off with the name, decimal IP,
459PXELINUX style hexadecimal IP, and more.</dd>
460<dt><tt class="docutils literal">maintenance.log</tt></dt>
461<dd>Maintenance log file recording what the maintenance service does.</dd>
462<dt><tt class="docutils literal"><span class="pre">disk-devices.lst</span></tt></dt>
463<dd>Optional list of disk devices to consider backuping up or restoring. This is
464intended for testboxes with additional disks that are used for other purposes
465and should touched.</dd>
466<dt><tt class="docutils literal">sda.raw.gz</tt></dt>
467<dd>The gzipped raw copy of the sda device of the testbox.</dd>
468<dt><tt class="docutils literal"><span class="pre">sd[bcdefgh].raw.gz</span></tt></dt>
469<dd>The gzipped raw copy sdb, sdc, sde, sdf, sdg, sdh, etc if any of them exists
470and are disks/SSDs.</dd>
471<dt>Note! If it turns out we can be certain to get a valid host name, we might just</dt>
472<dd>switch to use the hostname as the directory name instead of the IP.</dd>
473</dl>
474</div>
475<div class="section" id="debian-nfs-root-exports-testbox-nfsroot">
476<h1>Debian NFS root (/exports/testbox-nfsroot)</h1>
477<p>The testbox-nfsroot share should be read-only and must <strong>not</strong> have root
478squashing enabled.</p>
479<p>There are several ways of creating a debian nfsroot, but since we've got a
480tool like VirtualBox around we've just installed it in a VM, prepared it,
481and copied it onto the NFS server share.</p>
482<p>As of writing debian 8.6.0 is current, so a minimal 64-bit install of it was
483done in a VM. After installation the following modifications was done:</p>
484<blockquote>
485<ul>
486<li><p class="first"><tt class="docutils literal"><span class="pre">apt-get</span> install pxelinux syslinux <span class="pre">initramfs-tools</span> gddrescue joe</tt> and
487optionally <tt class="docutils literal"><span class="pre">apt-get</span> install smbclient <span class="pre">cifs-utils</span></tt>.</p>
488</li>
489<li><p class="first"><tt class="docutils literal">/etc/default/grub</tt> was modified to set <tt class="docutils literal">GRUB_CMDLINE_LINUX_DEFAULT</tt> to
490<tt class="docutils literal">&quot;&quot;</tt> instead of <tt class="docutils literal">&quot;quiet&quot;</tt>. This allows us to see messages during boot
491and perhaps spot why something doesn't work on a testbox. Regenerate the
492grub configuration file by running <tt class="docutils literal"><span class="pre">update-grub</span></tt> afterwards.</p>
493</li>
494<li><p class="first">Create the directory <tt class="docutils literal">/etc/systemd/system/getty&#64;tty1.service.d</tt> and create
495the file noclear.conf in it with the following content:</p>
496<pre class="literal-block">
497[Service]
498TTYVTDisallocate=no
499</pre>
500<p>This stops getty from clearing VT1 and let us see the tail of the boot up
501messages, which includes messages from the testbox-maintenance service.</p>
502</li>
503<li><p class="first">Copy the <tt class="docutils literal"><span class="pre">testbox-maintenance.sh</span></tt> file found in the same directory as this
504document to <tt class="docutils literal">/root/scripts/</tt> (need to create the dir) and make it
505executable.</p>
506</li>
507<li><p class="first">Create the systemd service file for the maintenance service as
508<tt class="docutils literal"><span class="pre">/etc/systemd/system/textbox-maintenance.service</span></tt> with the content:</p>
509<pre class="literal-block">
510[Unit]
511Description=Testbox Maintenance
512After=network.target
513Before=getty&#64;tty1.service
514
515[Service]
516Type=oneshot
517RemainAfterExit=True
518ExecStart=/root/scripts/testbox-maintenance.sh
519ExecStartPre=/bin/echo -e \033%G
520ExecReload=/bin/kill -HUP $MAINPID
521WorkingDirectory=/tmp
522Environment=TERM=xterm
523StandardOutput=journal+console
524
525[Install]
526WantedBy=multi-user.target
527</pre>
528</li>
529<li><p class="first">Mount the testbox-nfsroot under <tt class="docutils literal">/mnt/</tt> with write privileges. (The write
530privileges are temporary - don't forget to remove them later on.):</p>
531<pre class="literal-block">
532mount -t nfs myserver.com:/exports/testbox-nfsroot
533</pre>
534</li>
535<li><p class="first">Copy the debian root and dev file system onto nfsroot. If you have ssh
536access to the NFS server, the quickest way to do it is to use <tt class="docutils literal">tar</tt>:</p>
537<pre class="literal-block">
538tar -cz --one-file-system -f /mnt/testbox-maintenance-nfsroot.tar.gz . dev/
539</pre>
540<p>An alternative is <tt class="docutils literal">cp <span class="pre">-ax</span> . /mnt/. &amp;&amp;&nbsp; cp <span class="pre">-ax</span> dev/. /mnt/dev/.</tt> but this
541is quite a bit slower, obviously.</p>
542</li>
543<li><p class="first">chroot into the nfsroot: <tt class="docutils literal">chroot /mnt/</tt></p>
544<blockquote>
545<ul>
546<li><p class="first">Enable our service: <tt class="docutils literal">systemctl enable <span class="pre">testbox-maintenance.service</span></tt></p>
547</li>
548<li><p class="first">Edit <tt class="docutils literal"><span class="pre">/etc/initramfs-tools/initramfs.conf</span></tt> and change the <tt class="docutils literal">MODULES</tt>
549value from <tt class="docutils literal">most</tt> to <tt class="docutils literal">netboot</tt>.</p>
550</li>
551<li><p class="first">Append <tt class="docutils literal">aufs</tt> to <tt class="docutils literal"><span class="pre">/etc/initramfs-tools/modules</span></tt>. The advanced
552multi-layered unification filesystem (aufs) enables us to use a
553read-only NFS root. <a class="footnote-reference" href="#id8" id="id3">[3]</a> <a class="footnote-reference" href="#id9" id="id4">[4]</a> <a class="footnote-reference" href="#id10" id="id5">[5]</a></p>
554</li>
555<li><p class="first">Create <tt class="docutils literal"><span class="pre">/etc/initramfs-tools/scripts/init-bottom/00_aufs_init</span></tt> as
556an executable file with the following content:</p>
557<pre class="literal-block">
558# Don't run during update-initramfs:
559case &quot;$1&quot; in
560 prereqs)
561 exit 0;
562 ;;
563esac
564
565modprobe aufs
566mkdir -p /ro /rw /aufs
567mount -t tmpfs tmpfs /rw -o noatime,mode=0755
568mount --move $rootmnt /ro
569mount -t aufs aufs /aufs -o noatime,dirs=/rw:/ro=ro
570mkdir -p /aufs/rw /aufs/ro
571mount --move /ro /aufs/ro
572mount --move /rw /aufs/rw
573mount --move /aufs /root
574exit 0
575</pre>
576</li>
577<li><p class="first">Update the init ramdisk: <tt class="docutils literal"><span class="pre">update-initramfs</span> <span class="pre">-u</span> <span class="pre">-k</span> all</tt></p>
578</li>
579<li><p class="first">Either copy the initrd.img and corresponding kernel to the
580<tt class="docutils literal"><span class="pre">testbox-tftp/maintenance-boot/</span></tt> directory, or create
581<tt class="docutils literal"><span class="pre">testbox-tftp/maintenance-boot</span></tt> as a symbolic link to
582<tt class="docutils literal"><span class="pre">testbox-nfsroot/boot/</span></tt>.</p>
583</li>
584<li><p class="first">Recreate <tt class="docutils literal">/etc/fstab</tt> with:</p>
585<pre class="literal-block">
586proc /proc proc defaults 0 0
587/dev/nfs / nfs defaults 1 1
588# Mount tftp and backup too.
589</pre>
590</li>
591<li><p class="first">xxx</p>
592</li>
593</ul>
594</blockquote>
595</li>
596<li><dl class="first docutils">
597<dt>Testing the setup from a VM is kind of useful:</dt>
598<dd><ul class="first last">
599<li><p class="first">Create a VM using the 64-bit debian profile. Let's call it &quot;pxe-vm&quot;.</p>
600</li>
601<li><p class="first">Mount the TFTP share somewhere, like M: or /mnt/testbox-tftp.</p>
602</li>
603<li><p class="first">Reconfigure the NAT DHCP and TFTP bits:</p>
604<pre class="literal-block">
605VBoxManage setextradata pxe-vm VBoxInternal/PDM/DriverTransformations/pxe/AboveDriver NAT
606VBoxManage setextradata pxe-vm VBoxInternal/PDM/DriverTransformations/pxe/Action mergeconfig
607VBoxManage setextradata pxe-vm VBoxInternal/PDM/DriverTransformations/pxe/Config/TFTPPrefix M:/
608VBoxManage setextradata pxe-vm VBoxInternal/PDM/DriverTransformations/pxe/Config/BootFile pxelinux.0
609</pre>
610</li>
611<li><p class="first">Create the file <tt class="docutils literal"><span class="pre">testbox-tftp/pxelinux.cfg/0A00020F</span></tt> containing:</p>
612<pre class="literal-block">
613PATH bios
614DEFAULT maintenance
615LABEL maintenance
616 MENU LABEL Maintenance (NFS)
617 KERNEL maintenance-boot/vmlinuz-3.16.0-4-amd64
618 APPEND initrd=maintenance-boot/initrd.img-3.16.0-4-amd64 ro ip=dhcp aufs=tmpfs \
619 boot=nfs root=/dev/nfs nfsroot=10.42.1.1:/exports/testbox-nfsroot
620LABEL local-boot
621LOCALBOOT
622</pre>
623</li>
624</ul>
625</dd>
626</dl>
627</li>
628</ul>
629</blockquote>
630<hr class="docutils" />
631<table class="docutils footnote" frame="void" id="id6" rules="none">
632<colgroup><col class="label" /><col /></colgroup>
633<tbody valign="top">
634<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>See <a class="reference external" href="http://www.syslinux.org/wiki/index.php?title=Category:Modules">http://www.syslinux.org/wiki/index.php?title=Category:Modules</a></td></tr>
635</tbody>
636</table>
637<table class="docutils footnote" frame="void" id="id7" rules="none">
638<colgroup><col class="label" /><col /></colgroup>
639<tbody valign="top">
640<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>See <a class="reference external" href="http://www.syslinux.org/wiki/index.php?title=PXELINUX#Configuration">http://www.syslinux.org/wiki/index.php?title=PXELINUX#Configuration</a></td></tr>
641</tbody>
642</table>
643<table class="docutils footnote" frame="void" id="id8" rules="none">
644<colgroup><col class="label" /><col /></colgroup>
645<tbody valign="top">
646<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td>See <a class="reference external" href="https://en.wikipedia.org/wiki/Aufs">https://en.wikipedia.org/wiki/Aufs</a></td></tr>
647</tbody>
648</table>
649<table class="docutils footnote" frame="void" id="id9" rules="none">
650<colgroup><col class="label" /><col /></colgroup>
651<tbody valign="top">
652<tr><td class="label"><a class="fn-backref" href="#id4">[4]</a></td><td>See <a class="reference external" href="http://shitwefoundout.com/wiki/Diskless_ubuntu">http://shitwefoundout.com/wiki/Diskless_ubuntu</a></td></tr>
653</tbody>
654</table>
655<table class="docutils footnote" frame="void" id="id10" rules="none">
656<colgroup><col class="label" /><col /></colgroup>
657<tbody valign="top">
658<tr><td class="label"><a class="fn-backref" href="#id5">[5]</a></td><td>See <a class="reference external" href="http://debianaddict.com/2012/06/19/diskless-debian-linux-booting-via-dhcppxenfstftp/">http://debianaddict.com/2012/06/19/diskless-debian-linux-booting-via-dhcppxenfstftp/</a></td></tr>
659</tbody>
660</table>
661<hr class="docutils" />
662<table class="docutils field-list" frame="void" rules="none">
663<col class="field-name" />
664<col class="field-body" />
665<tbody valign="top">
666<tr class="field"><th class="field-name">Status:</th><td class="field-body">$Id: TestBoxImaging.html 64498 2016-11-01 04:39:14Z vboxsync $</td>
667</tr>
668<tr class="field"><th class="field-name">Copyright:</th><td class="field-body">Copyright (C) 2010-2016 Oracle Corporation.</td>
669</tr>
670</tbody>
671</table>
672</div>
673</div>
674</body>
675</html>
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette