Bottas was quickest in both sessions, with Hamilton ending the day second overall -- 0.267 slower -- after tyre problems in the morning left him 19th.
It was the sixth race weekend in a row that Bottas, who has so far won only the opening race in Austria in July, had topped the first session timesheets and Mercedes again looked the team to beat.
The Finn also led the way at the Tuscan Grand Prix in Italy two weeks ago, only for Hamilton to seize pole position and then take his sixth win in nine races this year and 90th of his career.
Australian Daniel Ricciardo signalled the emerging threat from Renault by posting the second fastest time in the morning and third in the afternoon when McLaren's Carlos Sainz and Lando Norris were fourth and fifth.
Sainz had hit the barriers in an interrupted first session, damaging his car's rear wing.
Mercedes technical director James Allison told Sky Sports television that Hamilton damaged his hard tyres early in the opening session.
"It's incredibly easy to lock up a tyre and destroy the tyre set for the remainder of the session," he said.
The Russian Grand Prix will be the first race of a COVID-hit season with a significant number of fans present and organisers, who had aimed for a 30,000-strong crowd, said all tickets were sold out.
Mercedes have won every race at the Sochi circuit since the first in 2014, with six times world champion Hamilton triumphant on four occasions.
The champions have also started every race this season on pole position.
Hamilton leads Bottas by 55 points after nine races.
Red Bull's Max Verstappen was third fastest in the morning, when Canadian Nicholas Latifi crashed and brought out red flags, but dropped to seventh after lunch.
Mexican Sergio Perez was fourth and sixth fastest in the sessions for Racing Point.
Sebastian Vettel was the highest Ferrari driver in ninth in the morning but team mate Charles Leclerc ended the second session eighth.
By Alan Baldwin