You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

532 lines
18 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

% Copyright (C) 2018 TANSORIER.
% Permission is granted to copy, distribute and/or modify this document
% under the terms of the GNU Free Documentation License, Version 1.3
% or any later version published by the Free Software Foundation;
% with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
% A copy of the license is included in the section entitled "GNU
% Free Documentation License".
% https://www.gnu.org/licenses/fdl-1.3.html
% compress option to have horyzontal circle
\documentclass[compress]{beamer}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Thèmes suppélmentaires
\useoutertheme[]{miniframes} % barre menu du haut
\setbeamertemplate{frametitle}[default] % replace le titre à la bonne place
\useinnertheme[shadow=true]{rounded} % arrondi les angles
\usecolortheme{orchid}
\usecolortheme{whale}
%\usepackage{xcolor}
%\definecolor{smileOrange}{RGB}{254,128,86}
\setbeamertemplate{footline}[text line]{
\textcolor{gray}{%
\parbox{\linewidth}{\vspace*{-8pt}Smile\hfill\insertshortauthor\hfill\insertpagenumber/\inserttotalframenumber}}
}
\beamertemplatenavigationsymbolsempty
% Language
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage[latin1]{inputenc}
% Display Table Of Content spécific for smilebeamer
% Force to get empty
\AtBeginSection[]{}
\AtBeginSubsection[]{}
%{
% \begin{frame}<beamer>
% \frametitle{Plan}
% \tableofcontents[currentsection]
% \end{frame}
%}
% Change color of definiton block
\AtBeginEnvironment{definition}{%
\setbeamercolor{block title}{use=example text,fg=example text.fg,bg=example text.fg!20!bg}
\setbeamercolor{block body}{parent=normal text,use=block title,bg=block title.bg!50!bg}
}
% code coloration
\usepackage{listings}
% L'option "[fragile]" doit être rajouté au frame pour pouvoir utiliser correctement
% la police verbatim
\usepackage{color}
\lstset{
breaklines=true,
tabsize=4,
backgroundcolor=\color[RGB]{49,54,59},
basicstyle=\footnotesize\ttfamily\color{white},
commentstyle=\itshape\color[RGB]{0,136,136},
morecomment=[l]{\#},
morekeywords={*,\$,\{,\}},
stringstyle=\itshape\color[RGB]{218,116,0},
showstringspaces=false,
frame=LTBR,
}
\lstdefinestyle{shell}{
language=bash,
keywords={\$},
keywordstyle=\bfseries\color[RGB]{66,198,66}
}
\lstdefinelanguage{diff}{
morecomment=[f][\color{blue}]{@@}, % group identifier
morecomment=[f][\color{red}]-, % deleted lines
morecomment=[f][\color{green}]+, % added lines
morecomment=[f][\color{magenta}]{---}, % Diff header lines (must appear after +,-)
morecomment=[f][\color{magenta}]{+++},
}
% Pour utiliser des colonnes
\usepackage{multicol}
% Pour integrer un pdf
\usepackage[final]{pdfpages}
% Pour les hyperliens
\usepackage{hyperref}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title[U-Boot]{Memoires \\ \textbf{Partitionnement et manipulation de mémoires}}
\author[Mickaël Tansorier]{Mickaël Tansorier}
\date[Août 2018]{Présentation du fonctionnement Globale de mémoire.}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
%\tableofcontents[subsectionstyle=hide]
% *******************************
% **** PAGE DE GARDE ****
% *******************************
\begin{frame}
\titlepage
\end{frame}
% *******************************
% **** INTRODUCTION ****
% *******************************
\begin{frame}{Plan}
\tableofcontents[hideallsubsections]
\end{frame}
\section{Introduction}
\begin{frame}{}
Si l'on veux scripter les créations/modifications de partitions, il faut connaître:
\begin{itemize}
\item Comment fonctionne les tables de partition
\item Le type de partitionnement
\item le Format de partitionnement
\item Les outils de partitionnement
\end{itemize}
\end{frame}
% *******************************
% **** PRÉSENTATION ****
% *******************************
\section{Le types, les tables et le format de partitions}
\subsection{Type de partitionnent}
\begin{frame}[fragile]
Il existe trois types de partitions:
\begin{itemize}
\item \texttt{primary} — est utiliser comme partition de boot (pour windows)
\item \texttt{extended} — sert à abriter de multible partitions logique
\item \texttt{logical} — sert à abriter les fichier non relatif au système (audio, vidéo, ...)
\end{itemize}
\begin{lstlisting}[basicstyle=\tiny\ttfamily\color{white}]
+----------+----------+------------------------------------------------------+
| | | +---------+ +--------------------------+ |
| | | | | | | | |
| P1 | P2 | | L1 | | L2 | L3 | E1 |
| | | | | | | | |
| | | +---------+ +--------------------------+ |
+----------+----------+------------------------------------------------------+
\end{lstlisting}
\end{frame}
\subsection{Table de partition}
\begin{frame}[fragile]
Le type de table de partition défini l'entête du block device.\newline
On le retrouve sous lappellation label sous parted.\newline
Il en existe de plusieurs types: \texttt{aix}, \texttt{amiga}, \texttt{bsd}, \texttt{dvh}, \texttt{gpt}, \texttt{loop}, \texttt{mac}, \texttt{msdos}, \texttt{pc98}, ou \texttt{sun}.\newline
\newline
En règle général on se trouve en MBR (Master boot record) (ou \texttt{msdos}) car c'est le plus courant pour des système simpliste.\newline
Donc dans le doute c'est celui-là qu'il faut choisir... :) \newline
En effet \texttt{GPT} est son "successeur" et s'adresse à l'utilisation de boot en UEFI.
\end{frame}
\begin{frame}[fragile]{Exemple de différences}
Taille de partitions:
\begin{itemize}
\item Avec \texttt{msdos} il est impossible de créer une partition supérieur à 2.2 To ($2^{41}$ octets) sur des secteur de bloc de 512 byte.
\item Avec \texttt{GPT} (GUID Partition Table) il est possible de créer une partition allant jusqu'à 9,4 Zo (9,4 x 1021 octets)
\end{itemize}
Nombre de block:
\begin{itemize}
\item Avec \texttt{GTP} il est possible de créer jusqu'à 128 block logique
\item Avec \texttt{msdos} on peut aller seulement jusqu'à 4 block
\end{itemize}
Du fait de ses limitations le système de partitions \texttt{MBR} est remplacé la plupart du temps depuis 2013 par le système \texttt{GPT}.
\end{frame}
\subsection{Format de système de fichier}
\begin{frame}[fragile]
Le type de partition est défini par un numéro d'id.\newline
Ce numéro se trouve en entête de partition.
\begin{lstlisting}[basicstyle=\tiny\ttfamily\color{white}]
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT {frame}
\end{lstlisting}
\textcolor{gray}{\tiny{Logical Block Addressing: Cet adressage permet de désigner dune façon unique un secteur dun disque.}}
\end{frame}
% *******************************
% **** PRÉSENTATION ****
% *******************************
\section{Les outils}
\begin{frame}[fragile]{Les outils}
Les outils classique sous Linux:
\begin{itemize}
\item \texttt{parted}
\item \texttt{fdisk}
\item \texttt{sfdisk}
\end{itemize}
\end{frame}
\subsection{Parted}
\begin{frame}[fragile]
\begin{block}{Objectif}
Est de rendre scriptable un repartionnement.
\end{block}
Donc si vous pensez au confort de \texttt{gparted} vous pouvez oublier...
\end{frame}
\begin{frame}[fragile]{mkpart}
Exemple de commande:
\begin{lstlisting}[style=shell]
$ parted -a optimal /dev/usb mkpart primary 0% 4096MB
\end{lstlisting}
\begin{onlyenv}<2>
L'option -a (ou --align) peut prendre plusieurs valeurs:
\begin{itemize}
\item \texttt{none} — Utilise l'alignement le plus petit autorisé par le disque
\item \texttt{cylinder} — Aligne les partitions sur les cylindres
\item \texttt{minimal} — Utilise le le plus petit alignement défini par la topologie du disque.
\item \texttt{optimal} — Utilise l'alignement le plus optimisé donnée par la topologie du disque.
\end{itemize}
\end{onlyenv}
\begin{onlyenv}<3>
L'option \texttt{mkpart} prend en paramètre le type de partition (\texttt{primary}, \texttt{extended}, \texttt{logical}).\newline
Puis en option le type de file système:\newline
\texttt{mkpart part-type [fs-type] start end}\newline
Et enfin l'adresse de départ et celle d'arrivé.\newline
\newline
Par defaut les valeurs sont en megabit, sinon on peut préciser en pourcent, en secteur \texttt{2024s} ou \texttt{-1s} pour aller jusqu'au dernier secteur
\end{onlyenv}
\end{frame}
\begin{frame}[fragile]{label-type}
\begin{lstlisting}[style=shell]
mklabel label-type
\end{lstlisting}
L'option prend en paramètre une des valeurs:\newline
\texttt{aix}, \texttt{amiga}, \texttt{bsd}, \texttt{dvh}, \texttt{gpt}, \texttt{loop}, \texttt{mac}, \texttt{msdos}, \texttt{pc98}, ou \texttt{sun}.
\end{frame}
\begin{frame}[fragile]
L'option print nous renseigne sur des informations intéressante sur le type de mémoire.
\begin{lstlisting}[style=shell,basicstyle=\tiny\ttfamily\color{white}]
$ parted /dev/mmcblk0
GNU Parted 3.2
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: MMC W32508 (sd/mmc)
Disk /dev/mmcblk0: 7650MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 17.8MB 16.8MB primary fat32 lba
2 17.8MB 34.6MB 16.8MB primary fat32 lba
3 34.6MB 7650MB 7616MB extended
5 35.7MB 560MB 524MB logical ext4
6 561MB 1085MB 524MB logical ext4
7 1086MB 3183MB 2097MB logical ext4
8 3185MB 3709MB 524MB logical ext4
9 3710MB 4234MB 524MB logical ext4
10 4235MB 7650MB 3415MB logical ext4
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]{Alignement}
La difficulté est de bien aligner les secteurs si l'on utilise l'option optimal.\newline
On risque de tomber sur ce genre d'avertissement:
\begin{lstlisting}[style=shell]
(parted) mkpart primary 0 100%
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?
\end{lstlisting}
Si on ignore il va replacer le premier secteur (à \texttt{512B}).
\end{frame}
\begin{frame}[fragile]
Pour anticiper ce genre de problème et pour être sûre d'être sur des secteurs optimiser on peut trouver de l'information dans \texttt{/sys/}.
\begin{lstlisting}[style=shell]
$ cat /sys/block/sdb/queue/optimal_io_size
1048576
$ cat /sys/block/sdb/queue/minimum_io_size
262144
$ cat /sys/block/sdb/alignment_offset
0
$ cat /sys/block/sdb/queue/physical_block_size
512
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
Pour connaitre le premier block, il faut prendre:\newline
$(optimal\_io\_size + alignment\_offset)/physical\_block\_size$ \newline
\newline
Sauf qu'il nous manques des infos.\newline
Dans l'exemple on avait:\newline
$(1048576 + 0) / 512 = 2048$.\newline
\begin{lstlisting}[style=shell]
(parted) mkpart primary 2048s 100%
\end{lstlisting}
C'est possible de tester l'alignement de la partition avec
\begin{lstlisting}[style=shell]
(parted) align-check optimal 1"
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\begin{block}{Attention}
Avec \texttt{parted}, les effets sont immédiat contrairement à \texttt{fdisk} où il faut sauvegarder les changement avant application
\end{block}
\end{frame}
\subsection{sfdisk}
\begin{frame}[fragile]{sfdisk}
\texttt{sfdisk} vs \texttt{fdisk} [man]
\begin{itemize}
\item fdisk - Manipuler la table de partitions d'un disque
\item sfdisk - Afficher ou manipuler une table de partitions de disque
\end{itemize}
On peut lire: "sfdisk est un outil orienté script pour le partitionnement de nimporte quel périphérique bloc."\newline
\newline
\texttt{sfdisk} prend en entrée de ligne au format:
\begin{lstlisting}[style=shell]
<start> <size> <id> <bootable> <c,h,s> <c,h,s>
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
Exemple:
\begin{lstlisting}[style=shell]
{
echo ,9,0x0C,*
echo ,,,-
} | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
\end{lstlisting}
Ou
\begin{lstlisting}[style=shell]
sfdisk /dev/hdc << EOF
0,407
,407
;
;
EOF
\end{lstlisting}
\end{frame}
\subsection{fdisk}
%http://www.octetmalin.net/linux/tutoriels/fdisk-gestion-creer-supprimer-modifier-changer-partition-lister-afficher-disque-dur-ligne-commande.php
\begin{frame}[fragile]{fdisk}
\texttt{fdisk} est normalement utilisable sous forme de menu.\newline
On peut scripter les commandes envoyés au menu:
\begin{lstlisting}[style=shell]
(
echo "n" # creer une nouvelle partition
echo "p" # de type primary
echo "1" # de numero 1
echo "" # a partir du premier secteur de libre
echo "+16M" # de taille 16Mo
echo "w" # sauvegarder et quitter
) | fdisk ${DEVICE}
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
On peut formater la partition (fat/ext) :
\begin{lstlisting}[style=shell]
(
echo "t" # change le format
echo "1" # partition number
echo "c" # id
echo "w" #
) | fdisk ${DEVICE}
\end{lstlisting}
c = fat (LBA)\newline
83 = linux
\begin{lstlisting}[style=shell]
$ mkfs.vfat ${DEVICE}p1
\end{lstlisting}
\end{frame}
% *******************************
% **** PRÉSENTATION ****
% *******************************
\section{U-Boot env}
\begin{frame}[fragile]
\huge{Var d'environnement d'U-Boot}
\end{frame}
\begin{frame}[fragile]{Erreur de partition d'environnement}
\begin{lstlisting}[style=shell]
Warning - bad CRC, using default environment
\end{lstlisting}
Answer:
Most probably everything is OK. The message is printed because the flash sector or ERPROM containing the environment variables has never been initialized yet. The message will go away as soon as you save the envrionment variables using the saveenv command.
\url{https://www.denx.de/wiki/DULG/WarningBadCRCUsingDefaultEnvironment}
\end{frame}
\begin{frame}[fragile]
Une des possibilités est que côté espace utilisateur vos paramétrages ne soient pas correcte pour les outils u-boot.\newline
Exemple d'adressage dans le fichier \texttt{/etc/fw\_env.config}:
\begin{lstlisting}[style=shell,basicstyle=\tiny\ttfamily\color{white}]
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# MTD device name Device offset Env. size Flash sector size
/dev/mmcblk0 0x70000 0x2000 0x2000
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
On obtiendrait un partitionnement comme ceci:
\begin{lstlisting}[style=shell]
+---------------+ 0x0000
| |
+---------------+ 0x2000 8kb
| |
| mmcblk0p1 |
| |
+---------+ | 0x70000 450kb
| ENV | |
+---------+ |
| |
| |
+---------------+
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
Avec un correctif adapté on pourrait comme par exemple:
\texttt{/etc/fw\_env.config}
\begin{lstlisting}[language=diff,basicstyle=\tiny\ttfamily\color{white}]
----------- /etc/fw_env.config -----------
index 650a4c3b7..f833324b4 100644
@@ -2,4 +2,4 @@
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# MTD device name Device offset Env. size Flash sector size
-/dev/mmcblk0 0x70000 0x2000 0x2000
+/dev/mmcblk0 0x2000 0x4000 0x200
\end{lstlisting}
$0x2000 = 8kb$\newline
$0x4000 = 16kb$\newline
$0x200 = 512 bytes$
\end{frame}
\begin{frame}[fragile]
On obtiendrait donc dans \texttt{/dev/mmcblk0}:
\begin{lstlisting}[style=shell]
+---------------+ 0x0000
| |
+---------------+ 0x2000 8kb
| ENV |
| 16kb |
+---------------+ 0x6000 24kb
| |
+---------------+ 0x8000 32kb
| |
| mmcblk0p1 |
| |
| |
| |
| |
+---------------+
\end{lstlisting}
\end{frame}
% *******************************
% **** PRÉSENTATION ****
% *******************************
\section*{Conclusion}
\begin{frame}
\begin{center}
\begin{huge}
Question ?
\end{huge}
\end{center}
\begin{center}
\textcolor{gray}{\tiny{Enfin je vais essayer de répondre...}}
\end{center}
\end{frame}
\end{document}