Les périphériques blocs représentant des partitions, par exemple /dev/sda1, sont créés par le noyau de telle manière qu'il est impossible d'accéder au stockage adjacent à travers eux (en supposant que la table de partition n'a pas été modifiée après la dernière lecture du noyau par le noyau). Si vous pouviez accéder au stockage adjacent de cette manière, cela serait considéré comme un énorme bug.
David Foerster
Réponses:
18
Écraser une partition avec dd
ddest un outil très puissant mais aussi dangereux. Il fait ce que vous lui demandez de faire sans poser de questions. Donc, si vous lui dites d'effacer les photos de famille, ... et c'est une erreur de frappe mineure.
Mais si vous vérifiez et revérifiez, vous pouvez l'utiliser.
dd if=/dev/zero of=somepartition bs=512
ou je suggérerais
dd if=/dev/zero of=/dev/sdxn bs=4096
où xest la lettre de lecteur et nle numéro de partition et la taille de bloc 4096 octets accélère le processus d'écriture.
Dans ce cas, il est important que vous écriviez sur une partition . Si vous écrivez sur le lecteur entier (la tête de lecteur), /dev/sdxle lecteur entier sera écrasé. Mais l'écriture sur la partition sera interrompue à la fin de la partition et les partitions derrière elle seront conservées. (J'ai testé maintenant sur une clé USB dans Lubuntu 16.04 LTS, donc je sais que cela fonctionne comme ça.)
Exception pour une partition étendue
Il existe une exception pour une partition étendue (qui est un conteneur pour les partitions logiques, afin d'avoir plus de quatre partitions dans une table de partition MSDOS). Ceci est décrit dans le lien suivant,
Mais il y a aussi un autre problème. J'ai testé votre commande dans un environnement de test, et j'ai lu un seul kibioctet (1024 octets) quand je voulais qu'il fasse une image d'une partition étendue.
J'ai également testé cela maintenant sur une clé USB dans Lubuntu 16.04 LTS, et cela s'applique à l'écriture (ainsi qu'à la lecture). Seul le premier kibibyte est écrasé.
Pour résumer, l'écrasement des partitions principales et des partitions logiques fonctionne selon la description principale de cette réponse. Mais n'utilisez pas cette méthode pour écraser une partition étendue car seul le premier kibioctet sera écrasé. Les partitions logiques de la partition étendue ne seront plus trouvées via la table de partition, mais les données qui y sont stockées sont toujours là.
J'ai déjà accepté, mais si c'est le cas, ce devrait être la bonne réponse.
LogicBreaker
3
@LogicBreaker, vous pouvez peut-être déplacer l'acceptation. Mais ce n'est pas important. Il est plus important que vous compreniez comment l'utiliser ddet qu'il soit risqué, afin d'être très prudent lors de son utilisation. Bonne chance :-) En général, vous devriez toujours avoir une sauvegarde de tous les fichiers que vous ne pouvez pas vous permettre de perdre.
sudodus
1
Lors de l'écriture sur des partitions nues, vous n'avez pas beaucoup d'alternatives. J'ai déménagé, sinon ce serait trompeur pour les autres.
LogicBreaker
1
C'est pourquoi les utilisateurs ne peuvent normalement pas accéder aux "fichiers" / dev / *.
Thorbjørn Ravn Andersen
1
S'il s'agit de la seule copie de vos photos de famille sans sauvegarde, vous risquez de les perdre à tout moment par vol, incendie, accident ou simple défaillance matérielle :-)
user334639
4
Les écritures sur un périphérique de partition n'écriront pas en dehors de cette partition, avec dd ou autre chose. Vous auriez besoin d'utiliser un périphérique à disque complet pour avoir un effet en dehors d'une seule partition.
(Avertissement: sauf si votre disque a une table de partition avec des partitions qui se chevauchent, ce qui ne devrait jamais arriver.)
Autre mise en garde: si vous utilisez quelque chose comme LVM, l'écriture sur un volume physique peut bien sûr affecter de nombreux volumes logiques.
Maxpm
4
Je pense que votre question est basée sur un malentendu fondamental sur le fonctionnement dd(et en fait les systèmes d'exploitation de type Unix en général):
ddne peut pas écraser les partitions adjacentes, tout simplement parce que ddne peut pas écraser les partitions, point .
ddécrit simplement dans des fichiers . C'est ça.
Maintenant, si vous passez ddun fichier qui représente plusieurs partitions, puis ddécrasera ce fichier . Mais dans ce cas, il n'écrit pas ddaprès la fin de la partition. ddécrira toujours jusqu'à la fin du fichier, et seulement jusqu'à la fin du fichier.
Mais, si vous passez ddun fichier qui ne représente qu'une seule partition, alors ddil n'écrira pas après la fin de cette partition. Encore une fois, cela n'a rien à voir avec dd. ddécrit simplement dans le fichier sur lequel vous lui demandez d'écrire. Le fait que ce fichier représente une seule partition est (dans ce cas) assuré par le pilote de périphérique de bloc dans le noyau. ddn'a rien à voir avec ça.
Donc, en bref: ddécrit dans des fichiers. Ce que ces fichiers représentent, cela ne nous ddinquiète pas. ddne sait rien des partitions.
Mmh ... avec dd écrivant uniquement sur des fichiers, vous ne pouvez pas l'utiliser pour écrire sur des partitions brutes.
LogicBreaker
1
Correct. Vous ne pouvez pas utiliser ddpour écrire sur des partitions brutes. Vous ne pouvez écrire que dans des fichiers. Vous pouvez bien sûr écrire dans un fichier de périphérique de bloc qui représente une partition (telle que /dev/sda1), mais vous ne pouvez pas écrire sur une partition brute. Et comme vous ne pouvez écrire que dans un fichier qui représente une partition, vous ne pouvez pas écrire au-delà de la fin de la partition, car le fichier ne représente que la partition, et non la partition et un peu après la fin.
Jörg W Mittag du
3
Jorg fait référence à l'une des principales idées de la philosophie Unix - "tout est un fichier". En tant que tel, le noyau présente les patitions, les périphériques, les ports, etc. sous forme de fichiers. Par conséquent, chaque programme qui peut écrire dans un fichier peut être utilisé pour écrire sur une partition ou un périphérique. C'est le travail du noyau d'imposer la limite de partition. Vous pouvez ouvrir /dev/sdadans votre éditeur de texte et modifier les données, ddn'est pas différent de tout autre programme en termes d'accès aux partitions. Très bonne réponse!
Sergey
1
Il existe un scénario spécial dangereux, mais rare, dans lequel cela peut se produire même avec des pilotes de périphérique de bloc non buggés:
La table de partition sur le disque est modifiée de manière à ce que la partition x soit redimensionnée pour se terminer sur une limite inférieure qu'auparavant. Soit la partition y située derrière est redimensionnée en haut à partir d'une limite inférieure, soit une nouvelle partition y est ajoutée dans l'espace.
La partition y est remplie de données pertinentes par des moyens indépendants de la table de partition, par exemple en utilisant dd avec des options de saut / comptage sur le périphérique de bloc de disque entier (par exemple / dev / sda)
L'ioctl qui indique au noyau de relire la table de partition n'est pas émis ou échoue en raison de périphériques occupés
La partition x est écrite par n'importe quel processus qui essaie d'y écrire jusqu'à ce qu'elle rencontre une condition d'erreur.
Vous devez être prudent avec dd car si vous faites une erreur, vous pouvez écraser plus que ce que vous aviez négocié et cela dépend de ce que vous utilisez pour dd (l'OP était vague dans son utilisation de dd et la syntaxe exacte du dd commander).
Si vous spécifiez une partition, il écrit sur cette partition jusqu'à ce que la partition soit pleine.
Si vous faites une erreur et placez le lecteur entier, par exemple de = / dev / sda, dd écrira sur le disque entier pour commencer à ignorer (et écraser) votre table de partition.
Vous pouvez également utiliser dd sur une partition pour écraser les fichiers supprimés (les fichiers supprimés peuvent rester sur la partition et découverts par divers outils de récupération avec différents degrés de succès jusqu'à ce qu'ils soient écrasés. Dans ce cas, vous pouvez utiliser dd pour remplir l'espace libre en écrire dans un fichier.
Si vous pouviez écrire dans / dev / sdcX et réussir à écrire à travers une frontière de partition, ce ne serait pas dd que d'ignorer la table de partition - ce serait le pilote de périphérique de bloc dans le noyau étant bogué et ignorant la table de partition.
rackandboneman
1
@sudodus ddn'est pas si bas. En fait, la plupart des choses que les gens utilisent ddauraient pu être faites de la même façon cat. En fait, il catest légèrement plus rapide car il utilise des blocs plus gros que ceux ddpar défaut. Tout le code de bas niveau est dans le noyau. Et le conducteur ne se soucie pas vraiment si vous utilisez ddou cat.
kasperd
1
@sudodus - désolé pour la confusion, je n'étais pas aussi clair que prévu. dd peut certainement continuer à écrire, dépend de ce que vous lui dites de faire. dd if=/dev/zero of=/dev/sda bs=512 count=1ou dd if=/dev/zero of=/dev/sda bs=512sont des exemples. Avec la deuxième commande, il continuera d'écrire et remplira le disque entier en "ignorant" la table de partition. Si vous spécifiez une partition, dd if=/dev/zero of=/dev/sda1elle ne dépassera pas la partition. Cela dépend de ce que vous voulez faire avec dd.
Panther
1
@Panther La question dit spécifiquement of=somepartition, donc le cas où vous écrivez sur le périphérique de disque entier ne s'applique pas. ddne peut pas contourner les restrictions du pilote de périphérique.
Barmar
1
@Bamar read up J'ai déjà commenté cela. J'ai vu de nombreux utilisateurs confondre $ somepartition pour / dev / sda
/dev/sda1
, sont créés par le noyau de telle manière qu'il est impossible d'accéder au stockage adjacent à travers eux (en supposant que la table de partition n'a pas été modifiée après la dernière lecture du noyau par le noyau). Si vous pouviez accéder au stockage adjacent de cette manière, cela serait considéré comme un énorme bug.Réponses:
Écraser une partition avec
dd
dd
est un outil très puissant mais aussi dangereux. Il fait ce que vous lui demandez de faire sans poser de questions. Donc, si vous lui dites d'effacer les photos de famille, ... et c'est une erreur de frappe mineure.Mais si vous vérifiez et revérifiez, vous pouvez l'utiliser.
ou je suggérerais
où
x
est la lettre de lecteur etn
le numéro de partition et la taille de bloc 4096 octets accélère le processus d'écriture.Dans ce cas, il est important que vous écriviez sur une partition . Si vous écrivez sur le lecteur entier (la tête de lecteur),
/dev/sdx
le lecteur entier sera écrasé. Mais l'écriture sur la partition sera interrompue à la fin de la partition et les partitions derrière elle seront conservées. (J'ai testé maintenant sur une clé USB dans Lubuntu 16.04 LTS, donc je sais que cela fonctionne comme ça.)Exception pour une partition étendue
Il existe une exception pour une partition étendue (qui est un conteneur pour les partitions logiques, afin d'avoir plus de quatre partitions dans une table de partition MSDOS). Ceci est décrit dans le lien suivant,
Puis-je créer une image de partition «étendue» en utilisant dd?
J'ai également testé cela maintenant sur une clé USB dans Lubuntu 16.04 LTS, et cela s'applique à l'écriture (ainsi qu'à la lecture). Seul le premier kibibyte est écrasé.
Pour résumer, l'écrasement des partitions principales et des partitions logiques fonctionne selon la description principale de cette réponse. Mais n'utilisez pas cette méthode pour écraser une partition étendue car seul le premier kibioctet sera écrasé. Les partitions logiques de la partition étendue ne seront plus trouvées via la table de partition, mais les données qui y sont stockées sont toujours là.
la source
dd
et qu'il soit risqué, afin d'être très prudent lors de son utilisation. Bonne chance :-) En général, vous devriez toujours avoir une sauvegarde de tous les fichiers que vous ne pouvez pas vous permettre de perdre.Les écritures sur un périphérique de partition n'écriront pas en dehors de cette partition, avec dd ou autre chose. Vous auriez besoin d'utiliser un périphérique à disque complet pour avoir un effet en dehors d'une seule partition.
(Avertissement: sauf si votre disque a une table de partition avec des partitions qui se chevauchent, ce qui ne devrait jamais arriver.)
la source
Je pense que votre question est basée sur un malentendu fondamental sur le fonctionnement
dd
(et en fait les systèmes d'exploitation de type Unix en général):dd
ne peut pas écraser les partitions adjacentes, tout simplement parce quedd
ne peut pas écraser les partitions, point .dd
écrit simplement dans des fichiers . C'est ça.Maintenant, si vous passez
dd
un fichier qui représente plusieurs partitions, puisdd
écrasera ce fichier . Mais dans ce cas, il n'écrit pasdd
après la fin de la partition.dd
écrira toujours jusqu'à la fin du fichier, et seulement jusqu'à la fin du fichier.Mais, si vous passez
dd
un fichier qui ne représente qu'une seule partition, alorsdd
il n'écrira pas après la fin de cette partition. Encore une fois, cela n'a rien à voir avecdd
.dd
écrit simplement dans le fichier sur lequel vous lui demandez d'écrire. Le fait que ce fichier représente une seule partition est (dans ce cas) assuré par le pilote de périphérique de bloc dans le noyau.dd
n'a rien à voir avec ça.Donc, en bref:
dd
écrit dans des fichiers. Ce que ces fichiers représentent, cela ne nousdd
inquiète pas.dd
ne sait rien des partitions.la source
dd
pour écrire sur des partitions brutes. Vous ne pouvez écrire que dans des fichiers. Vous pouvez bien sûr écrire dans un fichier de périphérique de bloc qui représente une partition (telle que/dev/sda1
), mais vous ne pouvez pas écrire sur une partition brute. Et comme vous ne pouvez écrire que dans un fichier qui représente une partition, vous ne pouvez pas écrire au-delà de la fin de la partition, car le fichier ne représente que la partition, et non la partition et un peu après la fin./dev/sda
dans votre éditeur de texte et modifier les données,dd
n'est pas différent de tout autre programme en termes d'accès aux partitions. Très bonne réponse!Il existe un scénario spécial dangereux, mais rare, dans lequel cela peut se produire même avec des pilotes de périphérique de bloc non buggés:
la source
Vous devez être prudent avec dd car si vous faites une erreur, vous pouvez écraser plus que ce que vous aviez négocié et cela dépend de ce que vous utilisez pour dd (l'OP était vague dans son utilisation de dd et la syntaxe exacte du dd commander).
Si vous spécifiez une partition, il écrit sur cette partition jusqu'à ce que la partition soit pleine.
Si vous faites une erreur et placez le lecteur entier, par exemple de = / dev / sda, dd écrira sur le disque entier pour commencer à ignorer (et écraser) votre table de partition.
Vous pouvez également utiliser dd sur une partition pour écraser les fichiers supprimés (les fichiers supprimés peuvent rester sur la partition et découverts par divers outils de récupération avec différents degrés de succès jusqu'à ce qu'ils soient écrasés. Dans ce cas, vous pouvez utiliser dd pour remplir l'espace libre en écrire dans un fichier.
Selon ce que vous faites, cependant, vous souhaiterez peut-être utiliser un autre outil pour supprimer les fichiers en toute sécurité. Voir Comment supprimer des fichiers de manière sécurisée? pour les options.
la source
dd
n'est pas si bas. En fait, la plupart des choses que les gens utilisentdd
auraient pu être faites de la même façoncat
. En fait, ilcat
est légèrement plus rapide car il utilise des blocs plus gros que ceuxdd
par défaut. Tout le code de bas niveau est dans le noyau. Et le conducteur ne se soucie pas vraiment si vous utilisezdd
oucat
.dd if=/dev/zero of=/dev/sda bs=512 count=1
oudd if=/dev/zero of=/dev/sda bs=512
sont des exemples. Avec la deuxième commande, il continuera d'écrire et remplira le disque entier en "ignorant" la table de partition. Si vous spécifiez une partition,dd if=/dev/zero of=/dev/sda1
elle ne dépassera pas la partition. Cela dépend de ce que vous voulez faire avec dd.of=somepartition
, donc le cas où vous écrivez sur le périphérique de disque entier ne s'applique pas.dd
ne peut pas contourner les restrictions du pilote de périphérique.