Vinnaren i pepparkakshustävlingen!
2013-02-12, 22:44
  #1
Medlem
TorrentLovers avatar
Om man ska klona till exempelvis /dev/sda1 till /dev/sdc1, fungerar dd if=/dev/sda1 of=/dev/sdc1 lika bra som cat /dev/sda1>/dev/sdc1?
Läste att cat skulle vara snabbare än dd. Jag provade själv, och visst går kloning med cat snabbare jämfört med dd. Finns det några för- respektive nackdelar med det ena eller det andra, och vilket "ska" man använda?
Citera
2013-02-13, 21:55
  #2
Medlem
hashs avatar
Skillnaden mellan cat och dd är att det är två verktyg som kan göra lite olika saker.
Men när det kommer till klona diskar så är cat snabbare än dd, utav den anledningen att cat använder syscall mmap(2), dd använder read(2).
Ur prestandasynpunkt är mmap(2) snabbare än read(2) när man klonar diskar.

http://prstat.blogspot.se/2008/04/wh...than-dd1m.html
Citera
2013-02-13, 22:08
  #3
Medlem
TorrentLovers avatar
Citat:
Ursprungligen postat av hash
Skillnaden mellan cat och dd är att det är två verktyg som kan göra lite olika saker.
Men när det kommer till klona diskar så är cat snabbare än dd, utav den anledningen att cat använder syscall mmap(2), dd använder read(2).
Ur prestandasynpunkt är mmap(2) snabbare än read(2) när man klonar diskar.

http://prstat.blogspot.se/2008/04/wh...than-dd1m.html
Finns det för- resp. nackdeolar med det ena eller det andra? Hur är det med cp? Kan cp kopiera rådata eller endast kopiera filer mellan två mountade system?
Citera
2013-02-13, 22:53
  #4
Medlem
hashs avatar
Citat:
Ursprungligen postat av TorrentLover
Finns det för- resp. nackdeolar med det ena eller det andra? Hur är det med cp? Kan cp kopiera rådata eller endast kopiera filer mellan två mountade system?

dd som kommando har t ex fördelar som inte cat har, man kan trunkera en fil när som helst eller söka i en fil.

Jag kan inte cp-kommandot i detalj.
Kanske kan du få fram mer info genom att köra nedan kommando.

strace cp /etc/passwd /tmp
Citera
2013-02-13, 23:13
  #5
Medlem
När käll- eller destinationsdisken bara har ett block device-interface, tror jag att man måste använda dd, och med en korrekt angiven blockstorlek med bs= annars kopieras t.ex. bara den första hälften av varje sektor. Kopierar man mellan diskar/partitioner via deras character device-interface, kan man nog använda cat eller vilka andra kommandon som helst. Character devices är väl till just för att kunna behandla diskar som vanliga filer fyllda med bytes (och inte block).

Även med character devices och vanliga filer, har dd några möjligheter som andra kommandon inte erbjuder:

* Ingen buffring. Vid läsning och skrivning låter normala program som cat operativsystemet sköta buffringen som det vill (på det effektivaste sättet), t.ex. läsa filer några kB i taget. Det finns tillfällen då man inte kan låta OS:et göra det, som när man läser från poolen med slumpdata. På vissa system kommer `head -c 1 /dev/srandom` (/dev/srandom på OpenBSD, andra namn på andra OS) att läsa ett helt block med data, returnera den första byten, avsluta och resten kastas bort. dd däremot, tror jag läser obuffrat.

* Möjlighet att skriva till mitten av en fil, t.ex. ändra den 1024:e till 2047:e byten, utan att behöva skriva om hela filen.

Källa: http://www.google.se/search?q=cat+or+dd.

PS: Fixar alla filsystem det då, att plötsligt ligga på en större HD?
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback