Projet

Général

Profil

Management Cluster Ceph » Historique » Version 54

Mehdi Abaakouk, 30/01/2021 22:50

1 10 Mehdi Abaakouk
{{>toc}}
2 1 Mehdi Abaakouk
3 10 Mehdi Abaakouk
h1. Management Cluster Ceph
4 9 Mehdi Abaakouk
5 8 Mehdi Abaakouk
h2. Liens
6 8 Mehdi Abaakouk
7 45 Mehdi Abaakouk
* [[Cluster with libvirt]]
8 44 Mehdi Abaakouk
* [[HOWTO add a VM]]
9 44 Mehdi Abaakouk
* [[Management_Cluster_Ceph]]
10 44 Mehdi Abaakouk
* [[Ceph]]
11 8 Mehdi Abaakouk
* [[Ceph-Sharing-Disk]]
12 46 Mehdi Abaakouk
* [[Openstack Management TTNN]] (obsolete)
13 44 Mehdi Abaakouk
* [[Openstack Setup VM pas dans openstack]] (obsolete)
14 44 Mehdi Abaakouk
* [[Openstack Installation TTNN]] (obsolete)
15 44 Mehdi Abaakouk
* [[Openstack Installation nouvelle node du cluster]] (obsolete)
16 44 Mehdi Abaakouk
* "Openstack tools for ttnn":/projects/git-tetaneutral-net/repository/openstack-tools
17 8 Mehdi Abaakouk
18 2 Mehdi Abaakouk
h2. Ajout d'un OSD classique
19 2 Mehdi Abaakouk
20 52 Aymeric APLU
*voir les fonctions helper*
21 20 Mehdi Abaakouk
22 20 Mehdi Abaakouk
<pre>
23 1 Mehdi Abaakouk
$ ceph-disk prepare --zap-disk --cluster-uuid 1fe74663-8dfa-486c-bb80-3bd94c90c967 --fs-type=ext4 /dev/sdX
24 34 Laurent GUERBY
$ tune2fs -c 0 -i 0 -m 0 /dev/sdX1
25 1 Mehdi Abaakouk
$ smartctl --smart=on /dev/sdX  # Pour le monitoring.
26 1 Mehdi Abaakouk
</pre>
27 1 Mehdi Abaakouk
28 1 Mehdi Abaakouk
Récuperer l'id avec (c'est celui tout en bas pas accroché à l'arbre):
29 1 Mehdi Abaakouk
30 1 Mehdi Abaakouk
<pre>
31 1 Mehdi Abaakouk
ceph osd tree
32 1 Mehdi Abaakouk
</pre>
33 1 Mehdi Abaakouk
34 26 Mehdi Abaakouk
*DEBUT WORKAROUND BUG PREPARE*
35 26 Mehdi Abaakouk
36 26 Mehdi Abaakouk
Dans le cas ou l'osd est DOWN après le prepare c'est surement ce bug
37 26 Mehdi Abaakouk
38 26 Mehdi Abaakouk
ID est le premier numero libre d'osd en partant de zero (en bas du ceph osd tree)
39 26 Mehdi Abaakouk
40 26 Mehdi Abaakouk
<pre>
41 26 Mehdi Abaakouk
mkdir /var/lib/ceph/osd/ceph-<ID>
42 26 Mehdi Abaakouk
chown ceph:ceph /var/lib/ceph/osd/ceph-<ID>
43 26 Mehdi Abaakouk
ceph-disk activate /dev/sd<X>1
44 26 Mehdi Abaakouk
systemctl status ceph-osd@<ID>
45 26 Mehdi Abaakouk
</pre>
46 26 Mehdi Abaakouk
47 26 Mehdi Abaakouk
*FIN WORKAROUND BUG PREPARE*
48 26 Mehdi Abaakouk
49 17 Mehdi Abaakouk
Pour un HDD: 
50 2 Mehdi Abaakouk
<pre>
51 2 Mehdi Abaakouk
$ ceph osd crush add osd.<ID> 0 root=default host=<host>
52 1 Mehdi Abaakouk
</pre>
53 2 Mehdi Abaakouk
54 17 Mehdi Abaakouk
Pour un SSD:
55 2 Mehdi Abaakouk
<pre>
56 2 Mehdi Abaakouk
$ ceph osd crush add osd.<ID> 0 root=ssd host=<host>-ssd
57 2 Mehdi Abaakouk
</pre>
58 2 Mehdi Abaakouk
59 42 Mehdi Abaakouk
Ensuite, autoriser Ceph à mettre des data dessus WEIGHT == 1 par 1To (ie: 4To -> 4)
60 2 Mehdi Abaakouk
61 2 Mehdi Abaakouk
<pre>
62 42 Mehdi Abaakouk
$ ceph osd crush reweight osd.<ID> <WEIGHT>
63 19 Mehdi Abaakouk
</pre>
64 19 Mehdi Abaakouk
65 35 Mehdi Abaakouk
h3. helper
66 35 Mehdi Abaakouk
67 36 Mehdi Abaakouk
<pre>
68 35 Mehdi Abaakouk
add_osd(){
69 35 Mehdi Abaakouk
  dev="$1"
70 35 Mehdi Abaakouk
  type="$2"
71 35 Mehdi Abaakouk
  host=$(hostname -s)
72 35 Mehdi Abaakouk
  [ "$type" == "ssd" ] && host="${host}-ssd"
73 39 Mehdi Abaakouk
74 39 Mehdi Abaakouk
  found=0 ; next=-1 ; for i in $(ceph osd ls); do next=$((next+1)) ; [ $(($i - $next)) -gt 0 ] && found=1 && break; done ; [ $found -eq 0 ] && next=$((next+1))
75 39 Mehdi Abaakouk
76 35 Mehdi Abaakouk
  mkdir /var/lib/ceph/osd/ceph-$next
77 35 Mehdi Abaakouk
  chown ceph:ceph /var/lib/ceph/osd/ceph-$next
78 35 Mehdi Abaakouk
79 41 Mehdi Abaakouk
  ceph-disk prepare --zap-disk --cluster-uuid 1fe74663-8dfa-486c-bb80-3bd94c90c967 --fs-type=ext4 $dev
80 37 Mehdi Abaakouk
  tune2fs -c 0 -i 0 -m 0 ${dev}1
81 1 Mehdi Abaakouk
  smartctl --smart=on $dev
82 37 Mehdi Abaakouk
83 37 Mehdi Abaakouk
  systemctl start ceph-osd@$next
84 35 Mehdi Abaakouk
  systemctl status ceph-osd@$next
85 35 Mehdi Abaakouk
86 38 Mehdi Abaakouk
  sleep 1
87 54 Mehdi Abaakouk
  ceph osd crush add osd.$next 0 root="${type}" host="${host}"
88 35 Mehdi Abaakouk
}
89 36 Mehdi Abaakouk
</pre>
90 35 Mehdi Abaakouk
91 47 Fabien ADAM
Exemple: @add_osd /dev/sdb default@ pour un HDD
92 47 Fabien ADAM
93 53 Aymeric APLU
Une fois un disk (ou ssd) ajouté le disque à un poid de 0. A reweight après (attention ça va lance le déplacement des données).
94 53 Aymeric APLU
95 19 Mehdi Abaakouk
h2. Vider un OSD:
96 19 Mehdi Abaakouk
97 1 Mehdi Abaakouk
<pre>
98 35 Mehdi Abaakouk
vider_osd(){
99 19 Mehdi Abaakouk
  name="$1"
100 19 Mehdi Abaakouk
  ceph osd out ${name}
101 19 Mehdi Abaakouk
  ceph osd crush reweight ${name} 0
102 19 Mehdi Abaakouk
  ceph osd reweight ${name} 0
103 19 Mehdi Abaakouk
}
104 19 Mehdi Abaakouk
</pre>
105 19 Mehdi Abaakouk
106 19 Mehdi Abaakouk
h2. Suppression d'un OSD:
107 19 Mehdi Abaakouk
108 51 Aymeric APLU
si la machine host est toujours présente lancer cette machine avce le numéro de l'osd sur la machine en question  
109 19 Mehdi Abaakouk
<pre>
110 19 Mehdi Abaakouk
remove_osd(){
111 19 Mehdi Abaakouk
 name="$1" 
112 19 Mehdi Abaakouk
 ceph osd out ${name}
113 19 Mehdi Abaakouk
 systemctl stop ceph-osd@${name#osd.}
114 19 Mehdi Abaakouk
 ceph osd crush remove ${name}
115 19 Mehdi Abaakouk
 ceph auth del ${name}
116 19 Mehdi Abaakouk
 ceph osd rm ${name}
117 19 Mehdi Abaakouk
 ceph osd tree
118 19 Mehdi Abaakouk
}
119 19 Mehdi Abaakouk
</pre>
120 47 Fabien ADAM
121 51 Aymeric APLU
si la machine n'est plus présente lancer cette commande avec le numéro de osd depuis n'importe quel machine.
122 50 Aymeric APLU
123 50 Aymeric APLU
<pre>
124 50 Aymeric APLU
remove_osd_without_system(){
125 50 Aymeric APLU
 name="$1" 
126 50 Aymeric APLU
 ceph osd out ${name}
127 50 Aymeric APLU
 ceph osd crush remove ${name}
128 50 Aymeric APLU
 ceph auth del ${name}
129 50 Aymeric APLU
 ceph osd rm ${name}
130 50 Aymeric APLU
 ceph osd tree
131 50 Aymeric APLU
}
132 50 Aymeric APLU
</pre>
133 50 Aymeric APLU
134 50 Aymeric APLU
135 19 Mehdi Abaakouk
Exemple : @remove_osd osd.21@
136 1 Mehdi Abaakouk
137 51 Aymeric APLU
Attention supprimer un osd va lancer le déplacement des données donc faire ça par lot. 
138 49 Aymeric APLU
139 19 Mehdi Abaakouk
h2. Arrêter les IO de recovery:
140 19 Mehdi Abaakouk
141 19 Mehdi Abaakouk
<pre>
142 19 Mehdi Abaakouk
ceph osd set nobackfill 
143 19 Mehdi Abaakouk
ceph osd set norebalance
144 19 Mehdi Abaakouk
ceph osd set norecover
145 19 Mehdi Abaakouk
</pre>
146 19 Mehdi Abaakouk
147 23 Mehdi Abaakouk
h2. Procédure d'upgrade
148 23 Mehdi Abaakouk
149 23 Mehdi Abaakouk
+
150 23 Mehdi Abaakouk
_*/!\Lire la release note (contient très très souvent des trucs à faire en plus) /!\*_+
151 23 Mehdi Abaakouk
152 23 Mehdi Abaakouk
153 23 Mehdi Abaakouk
h4. Upgrade des MONs:
154 23 Mehdi Abaakouk
155 23 Mehdi Abaakouk
Mettre le flags noout:
156 23 Mehdi Abaakouk
157 23 Mehdi Abaakouk
<pre>ceph osd set noout</pre>
158 23 Mehdi Abaakouk
159 23 Mehdi Abaakouk
Sur chaque MONs (g1/g2/g3)
160 23 Mehdi Abaakouk
<pre>
161 23 Mehdi Abaakouk
apt-get upgrade -y
162 23 Mehdi Abaakouk
systemctl restart ceph-mon@g*
163 23 Mehdi Abaakouk
ceph -s
164 23 Mehdi Abaakouk
</pre>
165 23 Mehdi Abaakouk
166 23 Mehdi Abaakouk
Note que seulement le node 'leader/master' va provoquer une micro/nano coupure, souvent c'est même invisible.
167 23 Mehdi Abaakouk
168 23 Mehdi Abaakouk
h4. Upgrade des OSDs:
169 23 Mehdi Abaakouk
170 23 Mehdi Abaakouk
Pour chaque machine
171 23 Mehdi Abaakouk
<pre>
172 23 Mehdi Abaakouk
apt-get upgrade -y
173 23 Mehdi Abaakouk
systemctl restart ceph-osd@*
174 23 Mehdi Abaakouk
</pre>
175 23 Mehdi Abaakouk
176 23 Mehdi Abaakouk
Puis attendre que le recovery termine avant de faire la suivante.
177 23 Mehdi Abaakouk
178 23 Mehdi Abaakouk
Une fois toutes les OSDs upgrader et relancer, faire:
179 23 Mehdi Abaakouk
180 23 Mehdi Abaakouk
<pre>ceph osd unset noout</pre>
181 23 Mehdi Abaakouk
182 19 Mehdi Abaakouk
h2. Remplacement à froid d'un tier cache:
183 19 Mehdi Abaakouk
184 19 Mehdi Abaakouk
upstream  doc: http://docs.ceph.com/docs/master/rados/operations/cache-tiering/
185 19 Mehdi Abaakouk
186 19 Mehdi Abaakouk
<pre>
187 19 Mehdi Abaakouk
ceph osd tier cache-mode ec8p2c forward
188 19 Mehdi Abaakouk
rados -p ec8p2c cache-flush-evict-all
189 19 Mehdi Abaakouk
ceph osd tier remove-overlay ec8p2
190 19 Mehdi Abaakouk
ceph osd tier remove ec8p2 ec8p2c
191 19 Mehdi Abaakouk
192 19 Mehdi Abaakouk
rados rmpool ec8p2c ec8p2c  --yes-i-really-really-mean-ita
193 19 Mehdi Abaakouk
ceph osd pool create ec8p2c 128 128 replicated
194 19 Mehdi Abaakouk
195 19 Mehdi Abaakouk
ceph osd tier add ec8p2 ec8p2c
196 19 Mehdi Abaakouk
ceph osd tier cache-mode ec8p2c writeback
197 19 Mehdi Abaakouk
ceph osd tier set-overlay ec8p2 ec8p2c
198 19 Mehdi Abaakouk
199 19 Mehdi Abaakouk
ceph osd pool set ec8p2c size 3
200 19 Mehdi Abaakouk
ceph osd pool set ec8p2c min_size 2
201 19 Mehdi Abaakouk
ceph osd pool set ec8p2c hit_set_type bloom
202 19 Mehdi Abaakouk
203 19 Mehdi Abaakouk
ceph osd pool set ec8p2c hit_set_count 1
204 19 Mehdi Abaakouk
ceph osd pool set ec8p2c hit_set_period 3600
205 19 Mehdi Abaakouk
ceph osd pool set ec8p2c target_max_bytes 200000000000
206 19 Mehdi Abaakouk
ceph osd pool set ec8p2c target_max_objects 10000000
207 19 Mehdi Abaakouk
ceph osd pool set ec8p2c cache_target_dirty_ratio 0.4
208 19 Mehdi Abaakouk
ceph osd pool set ec8p2c cache_target_full_ratio 0.8
209 19 Mehdi Abaakouk
</pre>
210 19 Mehdi Abaakouk
211 16 Mehdi Abaakouk
h2. Ajout d'un OSD qui partage le SSD avec l'OS (OBSOLETE PLUS COMPATIBLE AVEC LES FUTURES VERSION DE CEPH)
212 2 Mehdi Abaakouk
213 2 Mehdi Abaakouk
214 2 Mehdi Abaakouk
En général avec ceph, on donne un disque, ceph créé 2 partitions une pour le journal de l'OSD, l'autre pour les datas
215 2 Mehdi Abaakouk
mais pour le SSD de tetaneutral qui a aussi l'OS, voici la méthode
216 2 Mehdi Abaakouk
217 2 Mehdi Abaakouk
Création manuelle de la partition de data ceph /dev/sda2 ici
218 7 Mehdi Abaakouk
219 7 Mehdi Abaakouk
Debian (MBR format):
220 2 Mehdi Abaakouk
<pre>
221 5 Mehdi Abaakouk
apt-get install partprobe
222 5 Mehdi Abaakouk
fdisk /dev/sda
223 5 Mehdi Abaakouk
224 2 Mehdi Abaakouk
n
225 14 Mehdi Abaakouk
p
226 14 Mehdi Abaakouk
<enter>
227 14 Mehdi Abaakouk
<enter>
228 14 Mehdi Abaakouk
<enter>
229 14 Mehdi Abaakouk
<enter>
230 14 Mehdi Abaakouk
w
231 14 Mehdi Abaakouk
232 14 Mehdi Abaakouk
$ partprobe
233 14 Mehdi Abaakouk
</pre>
234 14 Mehdi Abaakouk
235 14 Mehdi Abaakouk
Ubuntu (GPT format):
236 2 Mehdi Abaakouk
<pre>
237 2 Mehdi Abaakouk
# parted /dev/sdb
238 2 Mehdi Abaakouk
GNU Parted 2.3
239 13 Mehdi Abaakouk
Using /dev/sdb
240 13 Mehdi Abaakouk
Welcome to GNU Parted! Type 'help' to view a list of commands.
241 13 Mehdi Abaakouk
(parted) print                                                            
242 18 Mehdi Abaakouk
Model: ATA SAMSUNG MZ7KM480 (scsi)
243 13 Mehdi Abaakouk
Disk /dev/sdb: 480GB
244 13 Mehdi Abaakouk
Sector size (logical/physical): 512B/512B
245 13 Mehdi Abaakouk
Partition Table: msdos
246 13 Mehdi Abaakouk
247 13 Mehdi Abaakouk
Number  Start   End     Size    Type     File system     Flags
248 2 Mehdi Abaakouk
 1      1049kB  20.0GB  20.0GB  primary  ext4            boot
249 2 Mehdi Abaakouk
 2      20.0GB  36.0GB  16.0GB  primary  linux-swap(v1)
250 15 Mehdi Abaakouk
251 15 Mehdi Abaakouk
(parted) mkpart                                                           
252 15 Mehdi Abaakouk
Partition type?  primary/extended?                                        
253 15 Mehdi Abaakouk
Partition type?  primary/extended? primary
254 15 Mehdi Abaakouk
File system type?  [ext2]? xfs                                            
255 15 Mehdi Abaakouk
Start?                                                                    
256 15 Mehdi Abaakouk
Start? 36.0GB                                                             
257 15 Mehdi Abaakouk
End? 100%                                                                 
258 1 Mehdi Abaakouk
(parted) print                                                            
259 1 Mehdi Abaakouk
Model: ATA SAMSUNG MZ7KM480 (scsi)
260 1 Mehdi Abaakouk
Disk /dev/sdb: 480GB
261 1 Mehdi Abaakouk
Sector size (logical/physical): 512B/512B
262 1 Mehdi Abaakouk
Partition Table: msdos
263 1 Mehdi Abaakouk
264 1 Mehdi Abaakouk
Number  Start   End     Size    Type     File system     Flags
265 1 Mehdi Abaakouk
 1      1049kB  20.0GB  20.0GB  primary  ext4            boot
266 1 Mehdi Abaakouk
 2      20.0GB  36.0GB  16.0GB  primary  linux-swap(v1)
267 1 Mehdi Abaakouk
 3      36.0GB  480GB   444GB   primary
268 1 Mehdi Abaakouk
269 1 Mehdi Abaakouk
(parted) quit                                                             
270 1 Mehdi Abaakouk
Information: You may need to update /etc/fstab.
271 1 Mehdi Abaakouk
</pre>
272 1 Mehdi Abaakouk
273 1 Mehdi Abaakouk
On prepare le disk comme normalement
274 1 Mehdi Abaakouk
275 1 Mehdi Abaakouk
<pre>
276 1 Mehdi Abaakouk
ceph-disk prepare --fs-type=ext4 --cluster-uuid 1fe74663-8dfa-486c-bb80-3bd94c90c967 /dev/sda2
277 1 Mehdi Abaakouk
ceph-disk activate /dev/sda2
278 1 Mehdi Abaakouk
ceph osd crush add osd.<ID> 0 root=ssd host=g3-ssd
279 1 Mehdi Abaakouk
</pre>
280 1 Mehdi Abaakouk
281 1 Mehdi Abaakouk
Ensuite, autoriser Ceph à mettre des data dessus:
282 1 Mehdi Abaakouk
283 1 Mehdi Abaakouk
<pre>
284 1 Mehdi Abaakouk
$ /root/tools/ceph-reweight-osds.sh osd.<ID>
285 1 Mehdi Abaakouk
</pre>
286 28 Laurent GUERBY
287 48 Fabien ADAM
h2. Remplacement des disques et des OSD correspondants
288 48 Fabien ADAM
289 48 Fabien ADAM
Régulièrement les disques tombent en panne, particulièrement au sein de l'asso où la température des différentes salles est élevée.
290 48 Fabien ADAM
291 48 Fabien ADAM
Voici la procédure générale à suivre pour maintenir le cluster Ceph :
292 48 Fabien ADAM
293 48 Fabien ADAM
+Partie 1+ : opérations matérielles
294 48 Fabien ADAM
295 48 Fabien ADAM
# Migrer les VMs sur un autre hôte (cf partie Openstack/Libvirt) *OU* prévoir l'arrêt des VM suivi d'un remplacement du/des disque(s) rapide
296 48 Fabien ADAM
# Identifier le(s) disque(s) à remplacer
297 48 Fabien ADAM
## Récupérer le(s) OSD down de la machine @ceph osd tree@
298 48 Fabien ADAM
## Trouver le(s) modèle(s) ainsi que sa taille. @lsblk -S@
299 48 Fabien ADAM
# Éteindre la machine, remplacer le(s) disque(s) défectueu(x), et la redémarrer
300 48 Fabien ADAM
## En cas de problème, brancher l'écran pour valider éventuellement un changement dans le bios, ou comprendre tout autre problème
301 48 Fabien ADAM
# Rédémarrer les VM si nécessaire
302 48 Fabien ADAM
303 48 Fabien ADAM
+Partie 2+ : modification du cluster Ceph
304 48 Fabien ADAM
305 48 Fabien ADAM
Cette partie peut se faire à distance tranquillement.
306 48 Fabien ADAM
307 48 Fabien ADAM
+Important+ : prévoir de faire d'abord _toutes les opérations sur les SSD_, puis ensuite _toutes les opérations sur les HDD_. L'intérêt est de réduire la RAM (et le CPU) utilisé par les OSD pendant la récupération, qui peut ralentir fortement le fonctionnement du cluster Ceph, et donc des VM qui l'exploite, avec des load qui explosent
308 48 Fabien ADAM
309 48 Fabien ADAM
# Bloquer les opérations de réparation (cf paragraphe dédié)
310 48 Fabien ADAM
# Supprimer les OSD correspondants aux anciens disques, sur chaque machine concernée
311 48 Fabien ADAM
## Repérer les OSD down dans @ceph osd tree@
312 48 Fabien ADAM
## Copier-coller la fonction _remove_osd_ (cf paragraphe dédié), et l'appeler
313 48 Fabien ADAM
# Ajouter les nouveaux OSD, sur chaque machine concernée
314 48 Fabien ADAM
## Repérer les disques inutilisé dans @lsblk -S@
315 48 Fabien ADAM
## Copier-coller la fonction _add_osd_ (cf paragraphe dédié), et l'appeler
316 48 Fabien ADAM
## Ajouter un poids à chaque nouvel OSD, correspondant à la taille du disque en To (exemple : @ceph osd crush reweight osd.21 0.5@)
317 48 Fabien ADAM
# Une fois tous les OSD d'un type ajouté, débloquer les opérations de réparation, en utilisant la commande _unset_ à la place de _set_
318 48 Fabien ADAM
# Suivre l'avancement, avec le pourcentage d'_objects misplaced_ qui va progressivement revenir à 0 : @ceph -s@
319 48 Fabien ADAM
320 48 Fabien ADAM
Une fois que le cluster est rétabli pour un type de disque, faire de même avec l'autre type.
321 48 Fabien ADAM
322 28 Laurent GUERBY
h2. inconsistent pg
323 28 Laurent GUERBY
324 32 Laurent GUERBY
* Analyse d'une erreur de coherence detectee par ceph
325 32 Laurent GUERBY
** https://lists.tetaneutral.net/pipermail/technique/2017-August/002859.html
326 32 Laurent GUERBY
327 28 Laurent GUERBY
<pre>
328 28 Laurent GUERBY
root@g1:~# ceph health detail
329 28 Laurent GUERBY
HEALTH_ERR 1 pgs inconsistent; 2 scrub errors
330 28 Laurent GUERBY
pg 58.22d is active+clean+inconsistent, acting [9,47,37]
331 28 Laurent GUERBY
2 scrub errors
332 28 Laurent GUERBY
root@g1:~# rados list-inconsistent-obj 58.22d  --format=json-pretty
333 28 Laurent GUERBY
{
334 28 Laurent GUERBY
    "epoch": 269000,
335 28 Laurent GUERBY
    "inconsistents": [
336 28 Laurent GUERBY
        {
337 28 Laurent GUERBY
            "object": {
338 28 Laurent GUERBY
                "name": "rbd_data.11f20f75aac8266.00000000000f79f9",
339 28 Laurent GUERBY
                "nspace": "",
340 28 Laurent GUERBY
                "locator": "",
341 28 Laurent GUERBY
                "snap": "head",
342 28 Laurent GUERBY
                "version": 9894452
343 28 Laurent GUERBY
            },
344 28 Laurent GUERBY
            "errors": [
345 28 Laurent GUERBY
                "data_digest_mismatch"
346 28 Laurent GUERBY
            ],
347 28 Laurent GUERBY
            "union_shard_errors": [
348 28 Laurent GUERBY
                "data_digest_mismatch_oi"
349 28 Laurent GUERBY
            ],
350 31 Laurent GUERBY
            "selected_object_info": 
351 31 Laurent GUERBY
"58:b453643a:::rbd_data.11f20f75aac8266.00000000000f79f9:head(261163'9281748 osd.9.0:6221608 dirty|data_digest|omap_digest s 4194304 uv 9894452 dd 2193d055 od ffffffff alloc_hint [0 0])",
352 28 Laurent GUERBY
            "shards": [
353 28 Laurent GUERBY
                {
354 28 Laurent GUERBY
                    "osd": 9,
355 28 Laurent GUERBY
                    "errors": [],
356 28 Laurent GUERBY
                    "size": 4194304,
357 28 Laurent GUERBY
                    "omap_digest": "0xffffffff",
358 28 Laurent GUERBY
                    "data_digest": "0x2193d055"
359 28 Laurent GUERBY
                },
360 28 Laurent GUERBY
                {
361 28 Laurent GUERBY
                    "osd": 37,
362 28 Laurent GUERBY
                    "errors": [
363 28 Laurent GUERBY
                        "data_digest_mismatch_oi"
364 28 Laurent GUERBY
                    ],
365 28 Laurent GUERBY
                    "size": 4194304,
366 28 Laurent GUERBY
                    "omap_digest": "0xffffffff",
367 28 Laurent GUERBY
                    "data_digest": "0x05891fb4"
368 28 Laurent GUERBY
                },
369 28 Laurent GUERBY
                {
370 28 Laurent GUERBY
                    "osd": 47,
371 28 Laurent GUERBY
                    "errors": [],
372 28 Laurent GUERBY
                    "size": 4194304,
373 28 Laurent GUERBY
                    "omap_digest": "0xffffffff",
374 28 Laurent GUERBY
                    "data_digest": "0x2193d055"
375 28 Laurent GUERBY
                }
376 28 Laurent GUERBY
            ]
377 28 Laurent GUERBY
        }
378 28 Laurent GUERBY
    ]
379 28 Laurent GUERBY
}
380 29 Laurent GUERBY
root@g1:~# ceph osd map disks rbd_data.11f20f75aac8266.00000000000f79f9
381 29 Laurent GUERBY
osdmap e269110 pool 'disks' (58) object 'rbd_data.11f20f75aac8266.00000000000f79f9' -> pg 58.5c26ca2d (58.22d) -> up ([9,47,37], p9) acting ([9,47,37], p9)
382 29 Laurent GUERBY
383 30 Laurent GUERBY
384 30 Laurent GUERBY
root@g8:/var/lib/ceph/osd/ceph-9/current/58.22d_head# find . -name '*11f20f75aac8266.00000000000f79f9*'
385 30 Laurent GUERBY
./DIR_D/DIR_2/DIR_A/DIR_C/rbd\udata.11f20f75aac8266.00000000000f79f9__head_5C26CA2D__3a
386 30 Laurent GUERBY
387 30 Laurent GUERBY
root@g10:/var/lib/ceph/osd/ceph-37/current/58.22d_head# find . -name '*11f20f75aac8266.00000000000f79f9*'
388 30 Laurent GUERBY
./DIR_D/DIR_2/DIR_A/DIR_C/rbd\udata.11f20f75aac8266.00000000000f79f9__head_5C26CA2D__3a
389 30 Laurent GUERBY
390 30 Laurent GUERBY
$ scp g8:/var/lib/ceph/osd/ceph-9/current/58.22d_head/DIR_D/DIR_2/DIR_A/DIR_C/rbd*data.11f20f75aac8266.00000000000f79f9__head_5C26CA2D__3a g8data
391 30 Laurent GUERBY
$ scp g10:/var/lib/ceph/osd/ceph-37/current/58.22d_head/DIR_D/DIR_2/DIR_A/DIR_C/rbd*data.11f20f75aac8266.00000000000f79f9__head_5C26CA2D__3a g10data
392 30 Laurent GUERBY
393 30 Laurent GUERBY
$ md5sum *
394 30 Laurent GUERBY
bd85c0ef1f30829ce07e5f9152ac2d2f  g10data
395 30 Laurent GUERBY
4297d0bc373e6603e0ad842702e0ecaa  g8data
396 30 Laurent GUERBY
$ $ diff -u <(od -x g10data) <(od -x g8data)
397 30 Laurent GUERBY
--- /dev/fd/63	2017-08-13 10:43:52.837097740 +0200
398 30 Laurent GUERBY
+++ /dev/fd/62	2017-08-13 10:43:52.833097808 +0200
399 30 Laurent GUERBY
@@ -2617,7 +2617,7 @@
400 30 Laurent GUERBY
 0121600 439b 14f4 bb4c 5f14 6ff7 4393 9ff8 a9a9
401 30 Laurent GUERBY
 0121620 29a8 56a4 1133 b6a8 2206 4821 2f42 4b2c
402 30 Laurent GUERBY
 0121640 3d86 41a2 785f 9785 8b48 4243 e7b9 f0aa
403 30 Laurent GUERBY
-0121660 29b6 be0c 0455 bf97 1c0d 49e5 75dd e1ed
404 30 Laurent GUERBY
+0121660 29a6 be0c 0455 bf97 1c0d 49e5 75dd e1ed
405 30 Laurent GUERBY
 0121700 2519 d6ac 1047 1111 0344 38be 27a1 db07
406 30 Laurent GUERBY
 0121720 dff6 c002 75d8 4396 6154 eba9 3abd 5d20
407 30 Laurent GUERBY
 0121740 8ae4 e63a 298b d754 0208 9705 1bb8 3685
408 30 Laurent GUERBY
</pre>
409 30 Laurent GUERBY
410 30 Laurent GUERBY
Donc un seul bit flip 29b6 vs 29a6  
411 30 Laurent GUERBY
412 30 Laurent GUERBY
<pre>
413 30 Laurent GUERBY
>>> bin(0xa)
414 30 Laurent GUERBY
'0b1010'
415 30 Laurent GUERBY
>>> bin(0xb)
416 30 Laurent GUERBY
'0b1011'
417 28 Laurent GUERBY
</pre>
418 29 Laurent GUERBY
419 29 Laurent GUERBY
* http://cephnotes.ksperis.com/blog/2013/08/20/ceph-osd-where-is-my-data
420 33 Laurent GUERBY
* https://superuser.com/questions/969889/what-is-the-granularity-of-a-hard-disk-ure-unrecoverable-read-error